关于scrapy中以下链接的问题

时间:2015-08-27 19:47:17

标签: python-2.7 scrapy

我想抓取一个包含几类网站的博客。从第一个类别开始导航页面,我的目标是按照类别收集每个网页。我从第1类收集了网站,但蜘蛛停在那里,无法达到第2类。

草案示例:

example draft

我的代码:

import scrapy
from scrapy.contrib.spiders import Rule, CrawlSpider
from scrapy.contrib.linkextractors import LinkExtractor
from final.items import DmozItem

    class my_spider(CrawlSpider):
    name = 'heart'
    allowed_domains = ['greek-sites.gr']
    start_urls = ['http://www.greek-sites.gr/categories/istoselides-athlitismos']

    rules = (Rule(LinkExtractor(allow=(r'.*categories/.*', )), callback='parse', follow=True),)


    def parse(self, response):
        self.logger.info('Hi, this is an item page! %s', response.url)
        categories = response.xpath('//a[contains(@href, "categories")]/text()').extract()
        for category in categories:
            item = DmozItem()
            item['title'] = response.xpath('//a[contains(text(),"gr")]/text()').extract() 
            item['category'] = response.xpath('//div/strong/text()').extract() 
        return item

1 个答案:

答案 0 :(得分:2)

问题很简单:callback必须与parse不同,因此我建议您将方法命名为parse_site,然后您就可以继续进行抓取了。< / p>

如果您进行以下更改,则可以使用:

rules = (Rule(LinkExtractor(allow=(r'.*categories/.*', )), callback='parse_site', follow=True),)

def parse_site(self, response):

原因如in the docs

所述
  

编写爬网蜘蛛规则时,请避免使用parse作为回调,因为CrawlSpider使用parse方法本身来实现其逻辑。因此,如果您覆盖parse方法,则抓取蜘蛛将不再有效。