python/scrapy动态内容

2024-10-05 13:15:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图编写一个python/scray脚本来获取来自https://www.donedeal.ie/search/search?section=cars&adType=forsale&source=&sort=relevance%20desc&max=30&start=0的广告列表,我对获取单个广告的url感兴趣。我发现page正在向https://www.donedeal.ie/search/api/v3/find/发出XHR POST请求。 试着写一个破壳脚本来试试我的想法:

from scrapy.http import FormRequest
url = 'https://www.donedeal.ie/search/api/v3/find/'
payload = {'section': "cars", 'adType': "forsale", 'source': "", 'sort': "relevance desc", 'area': '', 'max': '30', 'start':'0'}
req = FormRequest(url, formdata=payload)
fetch(req)

但我没有得到回应。在Chrome开发工具中,我看到这样的请求给出了一个带有条目id的json响应,我可以用它来自己形成url。在


我也尝试过Selenium方法,它给页面时间来加载动态内容,但这似乎也不起作用。在这个阶段完全迷失了:(


Tags: https脚本urlsourcesearchwwwsectionsort
2条回答

问题在于呼叫,有效载荷几乎正常。在

您要清理的站点只接受JSON作为有效负载,因此您应该将FormRequest更改为如下所示:

import json
yield Request( url, method='POST', 
               body=json.dumps(payload), 
               headers={'Content-Type':'application/json'} )

这是因为FormRequest用于模拟HTML表单(内容类型设置为application/x-www-form-urlencoded),而不是JSON调用。在

我不能用Scrapy创建一个有效的例子。在

不过,我确实为你想出了另外两个解决方案。在

在下面的示例中,response包含JSON数据。在


工作示例1使用^{}使用Python2.7.10测试

import urllib2

url = 'https://www.donedeal.ie/search/api/v3/find/'
payload = '{"section":"cars","adType":"forsale","source":"","sort":"relevance desc","max":30,"start":0,"area":[]}'

req = urllib2.Request(url)
req.add_header('Content-Type', 'application/json')

response = urllib2.urlopen(req, payload).read()


工作示例2使用^{}对Python2.7.103.3.53.5.0

^{pr2}$

相关问题 更多 >

    热门问题