0%

python爬虫实例之爬取豆瓣上的日剧

爬什么

把豆瓣的日剧爬取到本地,需要标题,电视剧类型,剧评这三个信息。

怎么做

  • 获取url
  • 发送请求,获取响应
  • 提取数据
  • 保存数据

获取url

观察可知,目标数据所在的url。
image.png

发送请求,获取响应

注意,这条请求必须把Referer参数带上,才能够正常获取响应数据。
image.png

提取数据

使用json.loads方法读取数据,先提取包含电视剧信息的整块数据。通过遍历列表,提取每部剧的详细信息。
image.png
image.png

保存数据

使用json.dumps方式写入数据,每个字段信息后面加上空格,每部剧的信息后面加上换行符,美化输出格式。
image.png

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import requests
import json
from pprint import pprint

class doubannew:
def __init__(self):
self.url = "https://m.douban.com/rexxar/api/v2/subject_collection/tv_japanese/items?os=windows&for_mobile=1&start=0&count=18&loc_id=108288&_=0"
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
"Referer": "https://m.douban.com/tv/japanese"
}

def parse_url(self,url,headers):
response = requests.get(url,headers=headers)
# print(response.content.decode())
return response.content.decode()

def get_content_list(self,html_str):
json_str = json.loads(html_str)
content_list = json_str["subject_collection_items"] #获取主要数据
return content_list

def save_content(self,content_list):
with open("doubannew.txt","a",encoding="utf8") as f:
for content in content_list: #遍历数据,提取每部剧的详细信息
title = content["title"] #提取标题
info = content["info"] #提取电视剧的类型
recommend_comment = content["recommend_comment"] #提取剧评
# pprint(recommend_comment)
# pprint(title)
f.write(title)
f.write(" ")
f.write(info)
f.write(" ")
f.write(recommend_comment)
f.write("\n\n") #为了输出格式更好看

def run(self): #实现主逻辑
#1. 获取url
#2. 发送请求,获取响应
html_str = self.parse_url(self.url,headers=self.headers)
#3. 提取数据
content_list = self.get_content_list(html_str)
#4. 保存数据
self.save_content(content_list)



if __name__ == '__main__':
my_douban = doubannew()
my_douban.run()

总结

这只是很初级的方法。并且只抓取了20部剧的信息。如果要抓取所有的电视剧,还要进一步学习,主要是剧的总数和url之间的数学关系,怎么使用代码表现出来。
先这样,下次有兴趣了继续。

-------------本文结束感谢您的阅读-------------