利用Requests库爬取豆瓣喜剧电影排行榜 前两百部电影的相关信息
首先附上豆瓣电影的网站链接:思考步骤:最后附上本文的代码:前200部电影结果展示:首先附上豆瓣电影的网站链接:
链接: link.
思考步骤:
右键网页 + 点击检查:
当我们下拉到第20部电影(蓝色圈)的时候 可以发现右边 network里面出现了请求
可以观察到 页面请求是get 并且 内容的格式(Content-Type) 为json
get() 请求里是不是可以添加params 参数呢
所以我们自定义params参数 通过get请求 返回给网页
param = {'type': '24','interval_id': '100:90','action': '','start': 0,'limit': '20'}
通过返回这样的参数 我们可以获取前20部电影的相关信息
在抓取到页面的资源后 利用json格式获取数据:
如何获取json里面的数据?
easy: 我们通过取字典里面内容的方式就可以了
print(response.json()[0].get('title'))print(response.json()[0].get('score'))print(response.json()[0].get('regions'))
最后附上本文的代码:
# 在下拉的过程中 页面ajax动态刷新页面 利用抓包工具查看返回内容类型 get请求 返回特定的参数即可 import requestsimport jsonimport pandas as pdif __name__ =="__main__":# 爬取豆瓣喜剧电影排行榜前200步电影的相关信息df = pd.DataFrame(columns=['电影名','评分','地区','地址','发布日期','评论人数'])url = '/j/chart/top_list' # 豆瓣电影地址headers = {"User-Agent" :"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"} # 利用 headers进行伪装for num in range(0,181,20): # 页面是ajax动态刷新的 每下拉到二十部 就刷新一次页面 所以181的下标 包含了前200部param = {'type': '24','interval_id': '100:90','action': '','start': num,'limit': '20'}response = requests.get(url=url,params=param,headers=headers) # 页面为get请求 可以在网站的headers中看到content=response.json() # Content-Type 为 json格式的数据 length=len(content)for i in range(0,length):s = pd.Series({'电影名':content[i].get('title'),'评分':eval(content[i].get('score')), '地区':content[i].get('regions')[0] , '地址':content[i].get('url'),'发布日期':content[i].get('release_date'),'评论人数':content[i].get('vote_count')})df = df.append(s, ignore_index=True)# 这里必须选择ignore_index=True 或者给 Series 一个index值df.to_csv('./douban_movie.csv',encoding='utf-8',index=False,index_label=None)