动态加载数据抓取-Ajax

Posted maplethefox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态加载数据抓取-Ajax相关的知识,希望对你有一定的参考价值。

特点:

1、右键 -> 查看网页源码中没有具体数据
2、滚动鼠标滑轮或其他动作时加载

抓取:

1、F12打开控制台,页面动作抓取网络数据包
2、抓取json文件URL地址
# 控制台中 XHR :异步加载的数据包
# XHR -> QueryStringParameters(查询参数)

豆瓣电影数据抓取案例

1.目标

1、地址: 豆瓣电影 - 排行榜 - 剧情
2、目标: 电影名称、电影评分

2.F12抓包(XHR)

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 # 每次加载的电影数量

3.代码实现

技术图片
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()
代码

 

 

 

 

 

 

以上是关于动态加载数据抓取-Ajax的主要内容,如果未能解决你的问题,请参考以下文章

第四章爬虫进阶之动态网页数据抓取

从零开始学Python-使用Selenium抓取动态网页数据

Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

数据爬虫:AJAX与网页动态加载 | R语千寻

C#利用phantomJS抓取AjAX动态页面

爬虫之抓取js生成的数据