Scrapy爬取ajax加载页面且post提交参数是Request Payload的方法

1. 怎么发起请求

scrapy.FormRequest()目前还不支持Payload参数提交方法
可以采用request的post方式:

scrapy.Request(url, headers=headers, body=json.dumps(payload_data), callback=self.parse, method='POST')

json.dumps():将dict格式转化成str格式

2. Response

返回来的一般是json数据格式,或者列表形式,亦或者数据中插入了一些字符,比如:“\”等,需要仔细查看,找出规律解析。

  • 可以使用json.loads()转换(和dumps()方法功能相反) 之后遍历取出需要的数据就可以了。
  • 可以使用ast第三方库下的ast.literal_eval(data_list)转化成list,之后遍历取出数据。

一般数据出现乱码,将编码转换为utf-8就可以了。
记录一下一个小坑,编码格式是utf-8但是中文还是乱码,出现url编码。
解码方式:

from urllib import parse
data = parse.unquote(response.text)

这样中文就可以正常显示了

3. 回调函数的传值

  1. item的传递
    scrapy.Request方法里面加上:meta=({'item': item})参数
    函数的获取:response.meta['item']
  2. 参数传递
    可以使用cb_kwargs传值,参数的值是字典格式。
Scrapy可以使用Selenium或Splash来爬取动态加载页面。其中,Selenium是一个自动化测试工具,也可以模拟用户在浏览器中的操作,从而获取页面内容。而Splash是一个JavaScript渲染服务,可以模拟浏览器渲染页面,并且提供了API接口,方便与Scrapy集成。下面分别介绍使用Selenium和Splash来爬取动态加载页面方法。 1. 使用Selenium 首先需要安装selenium库和对应的浏览器驱动,如ChromeDriver。然后在Scrapy的Spider中使用Selenium来获取页面内容,示例代码如下: ``` from scrapy import Spider from selenium import webdriver class MySpider(Spider): name = 'myspider' def start_requests(self): url = 'http://example.com' yield webdriver.Request(url, self.parse) def parse(self, response): driver = response.request.meta['driver'] # 使用driver来操作页面,获取需要的内容 ... ``` 在start_requests方法中,使用webdriver.Request来发送请求,并将回调函数设置为parse。在parse方法中,通过response.request.meta['driver']获取到了Selenium的WebDriver对象,然后就可以使用该对象来获取页面内容。 2. 使用Splash 首先需要安装Splash服务,并启动该服务。然后在Scrapy的Spider中使用Splash来获取页面内容,示例代码如下: ``` import scrapy from scrapy_splash import SplashRequest class MySpider(scrapy.Spider): name = 'myspider' start_urls = ['http://example.com'] def start_requests(self): for url in self.start_urls: yield SplashRequest(url, self.parse, args={'wait': 0.5}) def parse(self, response): # 使用response来操作页面,获取需要的内容 ... ``` 在start_requests方法中,使用SplashRequest来发送请求,并将回调函数设置为parse。在args参数中,可以设置Splash的一些参数,如wait表示等待时间。在parse方法中,直接使用response来获取页面内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值