爬取异步请求(XHR/JS)数据方法一人工分析异步请求

# !/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2018-07-06 12:30:04
# Project: test1

from pyspider.libs.base_handler import *


class Handler(BaseHandler):
    crawl_config = {
    }

    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl(
            'http://www.cdwater.gov.cn/admin/newsData.proxy?jsoncallback=jQuery18306603365339985892_1530710618747&channelId=0101001002000&pageNo=1&maxNo=12&citycode=&length=36&tag=1&username=%25E4%25B8%25AD%25E6%2596%2587',
            callback=self.index_page, validate_cert=False)#初始的第一个动态url

    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        print(response)
        web_data = response.text#返回的数据
        data = re.findall(r'[^()]+', web_data)[1]#数据处理,得到需要的json数据串
        content_list = json.loads(data)#得到json数据
        url = []
        for i in range(0, len(content_list['content_list'])):#从json数据中获取url,title
            url.append(content_list['content_list'][i]['url'])
            print(content_list['content_list'][i]['url'])
            self.crawl(content_list['content_list'][i]['url'], callback=self.detail_page, validate_cert=False)
        current_page = 1  # 当前页数
        total_page = 10  # 总页数
        next_page = current_page + 1  # 下一页
        if next_page <= total_page:  # 获取下一页的数据构造翻页
            self.crawl(
                'http://www.cdwater.gov.cn/admin/newsData.proxy?jsoncallback=jQuery18306603365339985892_1530710618747&channelId=0101001002000&pageNo={}&maxNo=12&citycode=&length=36&tag=1&username=%25E4%25B8%25AD%25E6%2596%2587'.format(
                    str(next_page)), callback=self.index_page)


    @config(priority=2)
    def detail_page(self, response):
        return {
        "url": response.url,
        "title": response.doc('title').text(),
        }

我们导入了2个模块他们的作用分别是:re用于正则获取数据,json用于json数据转化

开始异步爬虫分析:

第一步:浏览器打开需要爬取的url:

按F12使用谷歌浏览器自带的浏览器network工具,查看请求,或者自己使用抓包工具也可以(当前没有请求,莫方,你手动去点击下一页制造请求):


点击下一页或者直接刷新,就会在network上边看到有请求,这里注意看XHR和JS部分,有的是用js封数据请求会在js里面,也有会在XHR里面的异步请求:

从这里我们就可以清楚的在xhr返回的header里面看到异步请求的url,这里我们直接访问该url(或者在preview里面可以看到返回的数据)可以看到返回的数据就是新闻数据,也就是我们要爬的数据。



这下我们知道数据是通过这样式的url传过来的,因此我们需要分析url格式,不要怕一般都很有规律性,都是根据下边的参数构造的,找到规律就能构造出url出来,这里不详细分析,具体看目标网站如何封装。



到这里,我们基本知道接下来就是根据构造的url去写爬虫脚本,做详细的数据解析,这个就不详细讲了,具体问题具体分析。

这就是一种解决动态/异步请求html数据爬取的一种思路,有其他思路可以一起沟通。

猜你喜欢

转载自blog.csdn.net/u010955999/article/details/80939297
今日推荐