python - Scrapy FormRequest.from_response() 方法

标签 python scrapy

我正在尝试解析 this使用 Scrapy 的页面 为了显示带有价格的隐藏文本,我在字段中输入了任何邮政编码或随机数字:

<input aria-label="Enter your zip code" role="textbox" name="searchTerm" class="form-control js-list-zip-entry-input" placeholder="ZIP Code" autocompletetype="find-a-store-search" tabindex="-1" type="text">

对于带有价格的响应 url,我尝试使用 yse FormRequest.from_response ,但没有成功。 也许有人可以解释我如何回应价格?

import scrapy
from scrapy.http.request import Request
from scrapy.http import FormRequest
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class SattySpider(scrapy.Spider):
    name = "lowes-faucet"
    allowed_domains = ["lowes.com"]
    start_urls = [ "http://www.lowes.com/search?searchTerm=faucets"]

    def parse(self, response):
        yield FormRequest.from_response(response,
                                          formnumber=1,
                                          formxpath='id("store-locator-form")',
                                          formdata={'searchTerm': '58000'},
                                          callback=self.parse1, method="GET")
    def parse(self, response):
        open_in_browser(response)
        ...

最佳答案

这里的问题是表单在发送实际请求之前执行了一些 javascript 代码,并且请求正在向不同的站点完成,this one for example (您必须检查实际使用的参数)。但当然会传递更多的东西,主要是 cookie。

执行该请求后,服务器知道并设置当前 session 来自该位置,因此您需要对前一个站点执行另一个请求以获取包含实际数据的信息。

在 Scrapy 中它会是这样的:

  • 请求 http://www.lowes.com/search?searchTerm=faucets
  • 使用 cookie 请求上一个链接。
  • 再次请求 http://www.lowes.com/search?searchTerm=faucets 传递所有 cookie

Scrapy 应该自己处理 cookie,当然你不能 100% 确定,可能会有一些自定义 cookie。

关于python - Scrapy FormRequest.from_response() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40878455/

相关文章:

python - 某些网站上的 Scrapy 超时

python - 如何在 Python 中获取任意大小的空列表?

python selenium - 打印 xpath 值

python - 可以从 IronPython 使用 scikit 吗?

python - 连接两个数值以使用 Pandas 创建一个新列?

python返回多次

python - Incapsula 的工作原理以及如何战胜它

python - 在 bash 中调用一个 python 进程,然后将输出捕获到一个变量中

python - 无法在 Scrapy 蜘蛛中使用多个代理

python - 使用 scrapy 从 wordpress 站点抓取