2015-05-12 32 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 
    ) 

這將使您已經定義執行第一和第二的搜索蜘蛛,用你定義的任何新信息。