2015-05-12 31 views
0

背景
我对于通常使用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 

我需要什么
一旦我从初一请求刮数据,我需要再返回到原来的表单页面,与同类数据填好,然后刮它的结果好。我只是不确定如何去告诉蜘蛛回到第一页并执行一系列不同的操作。

回答

1

事实证明,这其实很简单。
在parse方法,只需更换用下面的代码的单个返回:

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 
    ) 

这将使您已经定义执行第一和第二的搜索蜘蛛,用你定义的任何新信息。