import requests
import json
from parse import parse_url
class DoubanSpider(object):
# 构造初始url
def __init__(self):
# 注意,此url是已经删除掉callback参数的,因为这里要获取json数据
self.origin_url = "https://m.douban.com/rexxar/api/v2/subject_collection/tv_american/items?os=ios&for_mobile=1&start={}&count=18&loc_id=108288&_=0"
# 提取数据
def get_data(self, json_data):
data_dict = json.loads(json_data)
data_list = data_dict["subject_collection_items"]
total = data_dict["total"]
return data_list, total
# 保存数据
def save_data(self, data_list):
with open("douban_json_data.txt", "a", encoding="utf-8") as f:
for data in data_list:
f.write(json.dumps(data, ensure_ascii=False))
f.write("\n")
print("保存成功")
def run(self):
# 经过分析url的规律,这里定义一个初始值,和原始初始值一样
origin_start_num = 0
total = 7 # 此处total的值随意定义,只要满足origin_start_num<total即可,让循环成立
while origin_start_num < total: # 此处total的值为什么要加18,自己认真考虑一下吧
# 1.获取最开始的url地址
url = self.origin_url.format(origin_start_num)
# 2.发送请求,获取数据
json_data = parse_url(url)
# 3.提取想要保存的数据
data_list, total = self.get_data(json_data)
# 4.保存数据
self.save_data(data_list)
# 根据分析url得知,后一次请求会在前一次的基础上start会加18
origin_start_num += 18
# 5.重复执行2-4步骤, 要使用循环
if __name__ == '__main__':
doubanspider = DoubanSpider()
doubanspider.run()
爬取数据其实最重要的是要找到自己要爬取数据url的规律,分析规律,此处只是将数据保存在了txt文件中,如果想要保存数据库,可以修改保存部分,后续会将数据保存到mongo中,正好回顾一下mongo数据库的使用,接下来会慢慢更新,如果对大家有帮助,请持续关注,当然,有好的建议,希望大家给与提出,感激不尽