网址:https://movie.douban.com/top250
导入第三方库requests、beautiful soup
requests用于对服务器发送请求:pip install requests
beautiful soup用于解析网页内容:pip install bs4
1、获取网页html源码
导入相关库
import requests
使用requests方法获取网页,将返回值传到response,并打印出来
url = "https://movie.douban.com/top250"
response = requests.get(url=url)
print(response)
状态码为418,服务器拒绝代码请求,用User-Agent伪装为浏览器请求
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43"
}
User-Agent的获取
打开任意网站,右键检查,选择网络刷新,单击任意一个,找到User-Agent复制下来
完整代码
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43"
}
url = "https://movie.douban.com/top250"
response = requests.get(url=url, headers=headers)
print(response.text) # 返回链接页面的html网页源码
打印内容的选择
- response.status_code 打印HTTP返回的状态码(200为访问成功)
- response.text 返回链接页面的html网页源码
2、解析网页内容
导入解析网页所需库
from bs4 import BeautifulSoup
将网页内容传送到BeautifulSoup中,将解析内容定义一个变量soup存储
因为BeautifulSoup还能解析其他的内容,所以用html.parser指定解析html网页内容
soup = BeautifulSoup(提取出的网页内容, "html.parser")
- soup.p:打印html里的第一个p元素里的内容,即soup.元素名表示打印出第一个html网页中出现该元素中的内容
- soup.findAll(“标签名”, attrs={“属性”:“值”}):根据标签,属性等找出符合条件的所有元素内容,attrs为可选参数,该方法会返回一个可迭代对象,通过for循环可以得到所有满足条件的元素(for 变量名 in 该方法赋值的变量名)
html = response.text
soup = BeautifulSoup(html, "html.parser") # html.parser表示对html类型文件进行解析
all_titles = soup.find_all("span", attrs={"class": "title"})
for title in all_titles:
title_string = title.string
if "/" not in title_string:
print(title_string) # 通过if判断语句删除不需要的标题
该代码只能返回前25的电影名,查看网站发现翻页后网址会有变化
https://movie.douban.com/top250?start=25&filter=
利用for循环和字符串格式化
for top_num in range(0, 250, 25):
url = f"https://movie.douban.com/top250?start={top_num}&filter="
爬取豆瓣电影top250电影名完整代码
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43"
}
for top_num in range(0, 250, 25):
url = f"https://movie.douban.com/top250?start={top_num}&filter="
response = requests.get(url=url, headers=headers)
html = response.text
soup = BeautifulSoup(html, "html.parser") # html.parser表示对html类型文件进行解析
all_titles = soup.find_all("span", attrs={"class": "title"}) # 通过find_all方法获取span元素里的内容,通过attrs= 选择span标签中class为title的内容
for title in all_titles:
title_string = title.string
if "/" not in title_string:
print(title_string) # 通过if判断语句删除不需要的标题