特点:
1、右键 -> 查看网页源码中没有具体数据
2、滚动鼠标滑轮或其他动作时加载
抓取:
1、F12打开控制台,页面动作抓取网络数据包 2、抓取json文件URL地址 # 控制台中 XHR :异步加载的数据包 # XHR -> QueryStringParameters(查询参数)
1、地址: 豆瓣电影 - 排行榜 - 剧情
2、目标: 电影名称、电影评分
1、Request URL(基准URL地址) :https://movie.douban.com/j/chart/top_list? 2、Query String(查询参数) # 抓取的查询参数如下: type: 13 # 电影类型 interval_id: 100:90 action: \'\' start: 0 # 每次加载电影的起始索引值 limit: 20 # 每次加载的电影数量
import requests import time from fake_useragent import UserAgent class DoubanSpider(): def __init__(self): self.base_url = \'https://movie.douban.com/j/chart/top_list\' self.i = 0 def get_html(self, params): ua = UserAgent() headers = {\'User-Agent\': ua.random} res = requests.get( url=self.base_url, params=params, headers=headers ) res.encoding = \'utf-8\' html = res.json() # 直接调用解析函数 self.parse_html(html) def parse_html(self, html): # html:[{电影1信息},{电影2信息},{}] item = {} for one in html: item[\'name\'] = one[\'title\'] item[\'score\'] = one[\'score\'] item[\'time\'] = one[\'release_date\'] print(item) self.i += 1 def get_total(self,typ): url = \'https://movie.douban.com/j/chart/top_list_count?type={}&interval_id=100%3A90\'.format(typ) ua = UserAgent() html = requests.get(url=url, headers={\'User-Agent\': ua.random}).json() total = html[\'total\'] return total def main(self): ty = input("请输入电影类型(剧情|喜剧|动作)") typ_dict={\'剧情\':\'11\',\'喜剧\':\'24\',\'动作\':\'5\'} typ=typ_dict[ty] total = self.get_total(typ) for page in range(0, int(total), 20): params = { \'type\': typ, \'interval_id\': \'100:90\', \'action\': \'\', \'start\': str(page), \'limit\': \'20\' } self.get_html(params) time.sleep(1) print(self.i) if __name__ == \'__main__\': spider = DoubanSpider() spider.main()