我正在尝试使用Scrapy解析this页面 为了显示隐藏文字的价格,我在字段中输入任意邮政编码或随机数:
<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">
对于有价格的回复网址,我尝试使用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)
...
答案 0 :(得分:1)
这里的问题是表单在发送实际请求之前正在执行一些javascript代码,而请求正在进行到另一个站点this one for example(您必须检查实际使用的参数) 。但当然传递更多的东西,主要是饼干。
执行该请求后,服务器知道并设置当前会话来自该位置,因此您需要对上一个站点执行另一个请求以获取包含实际数据的信息。
在Scrapy中它会是这样的:
http://www.lowes.com/search?searchTerm=faucets
http://www.lowes.com/search?searchTerm=faucets
传递所有Cookie Scrapy应该自己处理cookie,但当然你不能100%确定,可能会有一些自定义的cookie。