特色:html
一、右鍵 -> 查看網頁源碼中沒有具體數據
二、滾動鼠標滑輪或其餘動做時加載
抓取:json
1、F12打開控制檯,頁面動做抓取網絡數據包 2、抓取json文件URL地址 # 控制檯中 XHR :異步加載的數據包 # XHR -> QueryStringParameters(查詢參數)
網絡
一、地址: 豆瓣電影 - 排行榜 - 劇情
二、目標: 電影名稱、電影評分
dom
一、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()