龙空技术网

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

不想敲代码的程序员 26

前言:

目前小伙伴们对“js的数据请求”可能比较注重,朋友们都想要学习一些“js的数据请求”的相关资讯。那么小编在网摘上收集了一些对于“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(

';,

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(

'{}&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数据爬取的一种思路,有其他思路可以一起沟通。

标签: #js的数据请求