文章目录
要求
获取豆瓣电影TOP250所有电影名称及其他信息
网址为https://movie.douban.com/top250
由于我觉得英文名港台名这些没啥用,所以我就没爬了。
思路分析
首先,分析所需方法,可以看出所有电影相关信息是静态的,即所有信息都是由HTML写的,那只需要requests就可以了。
其次,获取请求头
最后,获取信息所在位置,方便后面的解析
可以看出,所有信息都是在<div class="info">
中的;其中,电影名在<span class="title">
中,演职表在<p class>
中,评分在<div class="star">
中。
至此,所有准备工作已经完成了,下面便让我们开始快乐编程吧。[finghting]
代码实现
# 静态网页实践
# coding: utf-8
import requests
from bs4 import *
from pandas import *
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.69",
'Host': "movie.douban.com"}
movie_dic={}
ALLname=[]
ALLstar=[]
ALLinfo=[]
for i in range(10):
link="https://movie.douban.com/top250?start="+str(i*25)
r=requests.get(link,headers=headers,timeout=10)
print("第",str(i+1),"页状态码:",r.status_code)
#以html.parser来解析
soup=BeautifulSoup(r.text,"html.parser")
div_list=soup.find_all("div",class_="info")
for i in div_list:
name=i.find("div",class_="hd").a.span.text.strip()
info=i.find("div",class_="bd").p.text.strip()
info = info.replace("\n", " ").replace("\xa0", " ")
info = ' '.join(info.split())
star=i.find('span',class_="rating_num").text.strip()
ALLname.append(name)
ALLstar.append(star)
ALLinfo.append(info)
#保存至excel文件
movie_dic["name"]=ALLname
movie_dic["info"]=ALLinfo
movie_dic["star"]=ALLstar
df=DataFrame(movie_dic)
df.to_excel("data.xlsx")
# print(movie_dic)
结果
这是最终结果的一部分,喜欢看电影的小伙伴有的看了