2014-03-30 148 views
0

我試圖瞭解Scrapy是如何工作的,但無法弄清楚如何使它抓取。不能使scrapy抓取

,我要抓取的網站有一個網頁http://www.example.com/Jason包含格式http://www.example.com/Jason:Aron,鏈接http://www.example.com/Jason:Dan_De

我設法爬像http://www.example.com/Jason:Aron一個頁面上的文本,但我不能讓它啓動從http://www.example.com/Jason並抓取所有鏈接在那裏的頁面。

這是我的蜘蛛:

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import Selector 

from tutorial.items import Item 

class Spider(CrawlSpider): 
    name = "text" 
    allowed_domains = ["example.com"] 
    start_urls = [ 
     "http://www.example.com/Jason", 
     "http://www.example.com/Jason:Aron", 
    ] 

    rules = (Rule (SgmlLinkExtractor(allow=('Jason:*')), callback='parse'),) 

    def parse(self, response): 
     sel = Selector(response) 
     sites = sel.xpath('//div[@class="textbox"]') 
     items = [] 
     for site in sites: 
      item = Item() 
      item['text'] = site.xpath('text()').extract() 
      items.append(item) 
     return items 

任何建議表示讚賞。

+0

注意'Jason:*'是一個正則表達式(匹配'Jason','Jason:','Jason ::',...)。這是你的意思嗎? – kev

回答

0

當您使用CrawlSpider,你最好不要覆蓋parse()方法:

當編寫蜘蛛抓取規則,避免使用解析回調,因爲CrawlSpider採用解析法本身來實現它的邏輯。因此,如果您重寫解析方法,抓取蜘蛛將不再起作用。

callback="parse"更改爲callback="parse_item",然後重試。

+0

該死的我很想念那個。將'callback =「parse」'改爲'callback =「parse_item」'和def parse(self,response):'def parse_item(self,response):'使它完美。謝謝。 – Debrian