2014-04-28 116 views
2

我必須抓取一個網站,所以我用Scrapy來做,但我需要通過一個cookie繞過第一頁(這是一種登錄頁面,你選擇你的位置)Scrapy Cookie操作如何?

我聽說在網絡上,你需要使用基礎蜘蛛(而不是抓取蜘蛛)來做到這一點,但我需要使用抓取蜘蛛來抓取,所以我需要做什麼?

起初是基地蜘蛛?然後啓動我的抓取蜘蛛?但我不知道Cookie是否會在它們之間傳遞,或者我該如何做?如何從另一隻蜘蛛發射蜘蛛?

如何處理cookie?我試着用這個

def start_requests(self): 
    yield Request(url='http://www.auchandrive.fr/drive/St-Quentin-985/', cookies={'auchanCook': '"985|"'}) 

但不工作

我的答案應該是here,但那傢伙真的是迴避,我不知道該怎麼辦。

+0

你可以看看我的答案在這裏:http://stackoverflow.com/a/ 22569515/2572383。它結合了登錄階段和CrawlSpider規則。 –

+0

謝謝,你的邏輯就是我想做的,做第一個請求登錄然後啓動爬行,但是這裏http://www.auchandrive.fr/drive/prehome?utm_campaign=auchanfr_logo&utm_medium=Interne&utm_source=Sphere_Auchan 我需要去通過這cookie與我認爲.Btw我開始認爲cookie通過JS:/ – Akhu

回答

3

首先,你需要在settings.py文件

COOKIES_ENABLED = True 

這是給你參考我的測試蜘蛛的代碼添加打開餅乾。我測試了它,並通過

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.http import Request 
from scrapy import log 

class Stackoverflow23370004Spider(CrawlSpider): 
    name = 'auchandrive.fr' 
    allowed_domains = ["auchandrive.fr"] 

    target_url = "http://www.auchandrive.fr/drive/St-Quentin-985/" 

    def start_requests(self): 
     yield Request(self.target_url,cookies={'auchanCook': "985|"}, callback=self.parse_page) 

    def parse_page(self, response):   
     if 'St-Quentin-985' in response.url: 
      self.log("Passed : %r" % response.url,log.DEBUG) 
     else: 
      self.log("Failed : %r" % response.url,log.DEBUG) 

您可以運行命令來測試,看控制檯輸出:

scrapy crawl auchandrive.fr 
2

我注意到在你的代碼片段中,你使用的是cookies={'auchanCook': '"985|"'},而不是cookies={'auchanCook': "985|"}

這應該讓你開始:

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.http import Request 


class AuchanDriveSpider(CrawlSpider): 
    name = 'auchandrive' 
    allowed_domains = ["auchandrive.fr"] 

    # pseudo-start_url 
    begin_url = "http://www.auchandrive.fr/" 

    # start URL used as shop selection 
    select_shop_url = "http://www.auchandrive.fr/drive/St-Quentin-985/" 

    rules = (
     Rule(SgmlLinkExtractor(restrict_xpaths=('//ul[@class="header-menu"]',))), 
     Rule(SgmlLinkExtractor(restrict_xpaths=('//div[contains(@class, "vignette-content")]',)), 
      callback='parse_product'), 
    ) 

    def start_requests(self): 
     yield Request(self.begin_url, callback=self.select_shop) 

    def select_shop(self, response): 
     return Request(url=self.select_shop_url, cookies={'auchanCook': "985|"}) 

    def parse_product(self, response): 
     self.log("parse_product: %r" % response.url) 

分頁可能會非常棘手。