2014-06-18 100 views
0

這是我第一次創建一個蜘蛛,儘管我的努力,它仍然沒有任何回報我的CSV導出。我的代碼是:Scrapy:蜘蛛沒有任何返回

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

class Emag(CrawlSpider): 
    name = "emag" 
    allowed_domains = ["emag.ro"] 
    start_urls = [ 
     "http://www.emag.ro/"] 

    rules = (Rule(SgmlLinkExtractor(allow=(r'www.emag.ro')), callback="parse", follow= True)) 

    def parse(self, response): 
     sel = Selector(response) 
     sites = sel.xpath('//a/@href').extract() 
     for site in sites: 
      site = str(site) 

     for clean_site in site: 
      name = clean_site.xpath('//[@id=""]/span').extract() 
      return name 

事情是,如果我打印的網站,它給我一個網址列表,這是確定的。如果我在scrapy shell中的某個URL中搜索名稱,它會找到它。問題是當我所有的鏈接所有名稱爬行。我運行它與「scrapy crawl emag> emag.cs​​v」

你能給我一個提示什麼是錯的?在蜘蛛

回答

1

多個問題:

  • rules應該是最後的括號指定
  • 沒有Item年代以前的迭代,缺少逗號 - 你需要定義一個Item類和返回/從產生它蜘蛛parse()回調

這裏是蜘蛛的一個固定的版本:

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


class MyItem(Item): 
    name = Field() 


class Emag(CrawlSpider): 
    name = "emag" 
    allowed_domains = ["emag.ro"] 
    start_urls = [ 
     "http://www.emag.ro/"] 

    rules = (Rule(SgmlLinkExtractor(allow=(r'www.emag.ro')), callback="parse", follow=True),) 

    def parse(self, response): 
     sel = Selector(response) 
     sites = sel.xpath('//a/@href') 
     for site in sites: 
      item = MyItem() 
      item['name'] = site.xpath('//[@id=""]/span').extract() 
      yield item 
+0

很多花時間。但它仍然沒有提取;它的錯誤與xpath選擇也是? – user3753592

+0

@ user3753592嘗試以這種方式運行蜘蛛:'scrapy crawl -o output.csv -t csv'。 – alecxe

+0

thks,那是我運行它們的最初方式。無論如何,我仍然有空文件 – user3753592