背景
我一般都非常习惯使用Scrapy和webscraping,我正在尝试访问目标网页,填写目前的表单,提交该表单并从已返回项目的页面中删除数据。完成这些步骤后,我想回到目标网页,填写包含不同信息的表单,抓取已返回的新数据,并将此数据附加到这些相同的项目。
我有什么
以下代码填写目标表单,抓取返回的页面以获取信息,并将该信息放入项目中。
import scrapy
from AirScraper.items import AirscraperItem
class airSpider(scrapy.Spider):
name = "airSpider"
start_urls = ["https://book.jetblue.com"]
origin = "MCO"
dest = "BOS"
dateDep = "2015-05-13"
dateRet = "2015-05-15"
def parse(self, response):
return scrapy.FormRequest.from_response(
response,
formname = "searchForm",
formdata={'origin' : self.origin, 'destination' : self.dest, 'departureDate' : self.dateDep, 'returnDate' : self.dateRet},
callback=self.after_search
)
def after_search(self, response):
flights = response.xpath('//*[contains(@class, "flight-row no-mint")]')
for sel in flights:
#scrape data about target flight
yield item
我需要什么
一旦我从第一个表单请求中删除了数据,我就需要返回到原始表单页面,用类似的数据填充它,然后抓取它的结果。我只是不确定如何告诉蜘蛛返回第一页并执行一系列不同的操作。
答案 0 :(得分:1)
事实证明,这实际上非常简单 在parse方法中,只需使用以下代码替换单个return:
def parse(self, response):
yield scrapy.FormRequest.from_response(
response,
formname = "searchForm",
formdata={'origin' : self.origin, 'destination' : self.dest, 'departureDate' : self.dateDep, 'returnDate' : self.dateRet},
callback=self.after_search
)
yield scrapy.FormRequest.from_response(
response,
formname = "searchForm",
formdata={'origin' : self.NEWorigin, 'destination' : self.NEWdest, 'departureDate' : self.NEWdateDep, 'returnDate' : self.NEWdateRet},
callback=self.after_search_2
)
这将使您已定义的蜘蛛执行第一次和第二次搜索,并使用您已定义的任何新信息。