本实践目的是获取豆瓣电影TOP250的所有电影的名称。
豆瓣电影TOP250网页链接:https://movie.douban.com/top250
1、分析网站
(1)提取请求头
这里以提取谷歌请求头为例:
①双击打开谷歌:
②在页面任意位置单击右键 > 选择“检查” > network:
若network下没有内容就刷新一下界面
③在name框下任意选择一项 > headers > request headers > user-agent
user-agent后的内容就是谷歌的请求头。
(2)查看网页发现每一页只有25个电影,但是题目要求的是top250的电影名称;
①单击第二页网页链接变为:
https://movie.douban.com/top250?start=25&filter=
②单击第三页网页链接变为:
https://movie.douban.com/top250?start=50&filter=
……
可以发现:每多一页,就是给网页链接的start参数加25。
2、获取网页信息(HTML代码)
(1)使用1中获取的请求头作为爬取网页信息的请求头,即伪装为谷歌请求头。
python">headers = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'
(2)使用for循环实现翻页
python">for i in range(0,10):
link = 'https://movie.douban.com/top250?start=' + str(i * 25) #每多一页,就是给网页链接的start参数加25
(3)使用requests.get()函数获取网页内容
python">r = requests.get(link, headers=headers, timeout= 20) #获取网页内容
(4)获取网页信息的完整代码:
python">import requests #导入requests库
def get_movies(): #定义获取函数
headers = {'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',#伪装为谷歌请求头
}
for i in range(0,10):
link = 'https://movie.douban.com/top250?start=' + str(i * 25) #每多一页,就是给网页链接的start参数加25
r = requests.get(link, headers=headers, timeout= 20) #获取网页内容
print (str(i+1),"页响应状态码:", r.status_code)
print (r.text)
get_movies() #调用函数
3、使用beautifulsoup解析网页得到最终结果
(1)将2中得到的HTML代码转换为soup对象
python">soup = BeautifulSoup(r.text, "lxml")
(2)使用soup.find()函数得到文章的题目信息
python">div_list = soup.find_all('div', class_='hd')
(3)解析网页完整代码
python">movie_list = []
for i in range(0,10):
link = 'https://movie.douban.com/top250?start=' + str(i * 25)
r = requests.get(link, headers=headers, timeout= 20)
print (str(i+1),"页响应状态码:", r.status_code)
soup = BeautifulSoup(r.text, "lxml")
div_list = soup.find_all('div', class_='hd')
for each in div_list:
movie = each.a.span.text.strip()
movie_list.append(movie)
return movie_list
4、实例完整代码:
python">import requests
from bs4 import BeautifulSoup
def get_movies():
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',
'Host': 'movie.douban.com'
}
movie_list = []
for i in range(0,10):
link = 'https://movie.douban.com/top250?start=' + str(i * 25)
r = requests.get(link, headers=headers, timeout= 20)
print (str(i+1),"页响应状态码:", r.status_code)
soup = BeautifulSoup(r.text, "lxml")
div_list = soup.find_all('div', class_='hd')
for each in div_list:
movie = each.a.span.text.strip()
movie_list.append(movie)
return movie_list
movies = get_movies()
print (movies)