博主最近正在学习python爬虫,课余写了一个爬取豆瓣电视剧热榜的程序,供大家参考,有不足的地方请大家多多包含,小弟菜鸡一枚~
正题开始:这是豆瓣电视剧榜单的首页,按下熟悉的F12,我们就可以来到控制台,点击XHR(使用AJAX发送的请求),找到一个可疑的链接如下图,点进去后我们能发现,这个返回的json字符串就是我们想要的信息了!!!
通过观察他的链接:
https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0
&sort=recommend可以不需要
改变page_limit=20&page_start=0 的值,便可以请求后面的内容
接下来就可以开始写程序啦!
代码:
import requests
import parse_url
import json
class DouBan:
#初始化爬取得url,以及请求头信息
def __init__(self):
self.url = "https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%83%AD%E9%97%A8&page_limit=20&page_start={}"
self.headers = {
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Mobile Safari/537.36"
}
#构造一个链接
def get_url_list(self,page_start):
return self.url.format(page_start)
#请求这个接口,返回一个json
def parse_html(self,url):
try:
print(url)
res = requests.get(url,headers=self.headers)
assert res.status_code == 200
res = res.content.decode()
except:
res = None
return res
#保存爬取的数据
def save(self,json_str):
re = json.loads(json_str)
for i in range(len(re["subjects"])):
title = re["subjects"][i]["title"]
rate = re["subjects"][i]["rate"]
url = re["subjects"][i]["url"]
with open("douban.txt","a",encoding="utf-8") as f:
f.write(title + " "+ rate + " " + url +" \n")
def run(self):
pagestart = 0;
count = True
while(count):
url = self.get_url_list(pagestart)
pagestart += 20
#返回的是json字符串
json_str = self.parse_html(url)
#转换成python的dict类型
re = json.loads(json_str)
#保存
self.save(json_str)
#判断返回的数据量是否大于20,是就继续,否就终止爬虫
count = True if len(re["subjects"]) == 20 else False
if __name__ == "__main__":
D = DouBan()
D.run()