1

我正在尝试让爬虫工作,但 SgmlLinkExtractor 似乎存在问题。

这是签名:

SgmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths(), tags=('a', 'area'), attrs=('href'), canonicalize=True,唯一=真,过程值=无)

我正在使用 allow() 选项,这是我的代码:

start_urls = ['http://bigbangtrans.wordpress.com']
rules = [Rule(SgmlLinkExtractor(allow=[r'series-\d{1}-episode-\d{2}.']), callback='parse_item')]

示例 url 看起来像http://bigbangtrans.wordpress.com/series-1-episode-11-the-pancake-batter-anomaly/

scrapy crawl tbbt包含的输出

[tbbt] 调试:已爬网(200)http://bigbangtrans.wordpress.com/series-3-episode-17-the-precious-fragmentation/>(参考:http ://bigbangtrans.wordpress.com )

但是,没有调用 parse_item 回调,我不知道为什么。

这是整个蜘蛛代码:

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

class TbbtSpider(CrawlSpider):
    #print '\n TbbtSpider \n'
    name = 'tbbt'
    start_urls = ['http://bigbangtrans.wordpress.com'] # urls from which the spider will start crawling
    rules = [Rule(SgmlLinkExtractor(allow=[r'series-\d{1}-episode-\d{2}.']), callback='parse_item')]


    def parse_item(self, response):
        print '\n parse_blogpost \n'
        hxs = HtmlXPathSelector(response)
        item = TbbtItem()
        # Extract title
        item['title'] = hxs.select('//div[@id="post-5"]/div/p/span/text()').extract() # XPath selector for title
        return item
4

1 回答 1

2

好的,所以这段代码不起作用的原因是因为您的规则的语法不正确。我修复了语法而没有进行任何其他更改,并且我能够点击parse_item回调。

rules = (
    Rule(SgmlLinkExtractor(allow=(r'series-\d{1}-episode-\d{2}.',),
        ), 
        callback='parse_item'),
    )

然而,标题都是空白的,这表明其中的hxs.select陈述parse_item是不正确的。下面的 xpath 可能更合适(我对所需的标题做了一个受过教育的猜测,但我可能完全找错了树)

item['title'] = hxs.select('//h2[@class="title"]/text()').extract() 
于 2013-01-29T01:23:35.447 回答