我正在尝试解析 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/