用python写爬虫----爬取电视剧基本信息
程序员文章站
2022-05-02 17:43:31
...
刚刚入门学习爬虫,试着爬取豆瓣的电视剧信息练手。废话不多说,进入正题。
工具:python、互联网、谷歌浏览器
import json
import requests
class TvSpider:
'''豆瓣电视爬虫'''
def __init__(self, country):
'''
爬虫类的初始化
:param country: 要爬去的国家,命名需与豆瓣的相契合
'''
# 要爬取的电视的国家全称
self.country = country
# 要爬去电视列表的第一页 在豆瓣电视剧的列表也找到items开头的请求,
self.url = 'https://m.douban.com/rexxar/api/v2/subject_collection/filter_tv_{}_hot/items?start=0&count=18'.format(
country)
self.headers = {
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1",
# 关联的url,必须加,否则豆瓣的反扒措施会让你一无所获
"Referer": "https://m.douban.com/tv/"}
def write_data(self, file_dict, filename):
'''定义文件写入函数 传入一个字典 和文件名'''
with open(filename, 'w', encoding='utf-8') as f:
f.write(json.dumps(file_dict["subject_collection_items"], indent=4, ensure_ascii=False))
def parse_url(self):
'''请求网址 获取返回的json数据'''
try:
# 发出get请求 获取数据
html_str = requests.get(self.url, verify=False, headers=self.headers)
html_str.encoding = 'utf-8'
return html_str.text
except Exception as e:
html_str = None
print(e)
return html_str
def run(self):
'''爬取的主要逻辑'''
# 1.根据初始化的country获取地一页数据及电视剧的总数量
# 组织url
html_str = self.parse_url()
# 解析数据
file_dict = json.loads(html_str)
total = file_dict['total']
# 豆瓣每一页的数量
step = 18
for i in range(18, int(total), step):
# 写入上次获取到的数据
self.write_data(file_dict, self.country + '{}.json'.format(int(i / 18)))
# 重新组织url
if i + 18 >= int(total):
count = int(total) - i
url = self.url.replace('start={}&count=18'.format(i - 18), 'start={}&count={}'.format(i, count))
else:
url = self.url.replace('start={}'.format(i - 18), 'start={}'.format(i))
# 请求url
html_str = self.parse_url()
# 解析数据
file_dict = json.loads(html_str)
#
if __name__ == '__main__':
# american 是豆瓣在设计url时设计的美国地区对应的名,需要观察各个地区的名,来获取其他地区
# 此处仅仅作为示范
spider = TvSpider('american')
spider.run()
上一篇: 模拟登陆豆瓣,发帖和回复code
下一篇: scrapy爬取豆瓣电影