在Scrapy中发送发布请求

Ami*_*thi 23 python web-crawler scrapy python-2.7

我正在尝试从Google Play商店抓取最新评论,但我需要发帖请求以获取最新评论.

随着邮差它的工作,我得到了理想的回应.

在此输入图像描述

但终端中的post请求给我一个服务器错误

例如:对于此页面https://play.google.com/store/apps/details?id=com.supercell.boombeach

curl -H "Content-Type: application/json" -X POST -d '{"id": "com.supercell.boombeach", "reviewType": '0', "reviewSortOrder": '0', "pageNum":'0'}' https://play.google.com/store/getreviews
Run Code Online (Sandbox Code Playgroud)

给出了服务器错误

Scrapy只是忽略了这一行:

frmdata = {"id": "com.supercell.boombeach", "reviewType": 0, "reviewSortOrder": 0, "pageNum":0}
        url = "https://play.google.com/store/getreviews"
        yield Request(url, callback=self.parse, method="POST", body=urllib.urlencode(frmdata))
Run Code Online (Sandbox Code Playgroud)

ait*_*rhh 27

上面的答案并没有真正解决问题.他们将数据作为参数发送,而不是作为请求正文的JSON数据.

来自http://bajiecc.cc/questions/1135255/scrapy-formrequest-sending-json:

my_data = {'field1': 'value1', 'field2': 'value2'}
request = scrapy.Request( url, method='POST', 
                          body=json.dumps(my_data), 
                          headers={'Content-Type':'application/json'} )
Run Code Online (Sandbox Code Playgroud)


Jit*_*hin 26

确保您的每个元素formdata都是string/unicode类型

frmdata = {"id": "com.supercell.boombeach", "reviewType": '0', "reviewSortOrder": '0', "pageNum":'0'}
url = "https://play.google.com/store/getreviews"
yield FormRequest(url, callback=self.parse, formdata=frmdata)
Run Code Online (Sandbox Code Playgroud)

我认为这样做

In [1]: from scrapy.http import FormRequest

In [2]: frmdata = {"id": "com.supercell.boombeach", "reviewType": '0', "reviewSortOrder": '0', "pageNum":'0'}

In [3]: url = "https://play.google.com/store/getreviews"

In [4]: r = FormRequest(url, formdata=frmdata)

In [5]: fetch(r)
 2015-05-20 14:40:09+0530 [default] DEBUG: Crawled (200) <POST      https://play.google.com/store/getreviews> (referer: None)
[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x7f3ea4258890>
[s]   item       {}
[s]   r          <POST https://play.google.com/store/getreviews>
[s]   request    <POST https://play.google.com/store/getreviews>
[s]   response   <200 https://play.google.com/store/getreviews>
[s]   settings   <scrapy.settings.Settings object at 0x7f3eaa205450>
[s]   spider     <Spider 'default' at 0x7f3ea3449cd0>
[s] Useful shortcuts:
[s]   shelp()           Shell help (print this help)
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects
[s]   view(response)    View response in a browser
Run Code Online (Sandbox Code Playgroud)

  • response.body将为您提供完整的html元素.如果你想要一些特定的条目你可以使用`response.xpath(YOUR_XPATH_HERE)`. (2认同)