Python 刮痕链接抽取器,跟随不工作

Python 刮痕链接抽取器,跟随不工作,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我试图从网络中提取所有链接。我的spider是一个名为GeneralSpider的超类的子类。问题是,当我通过parse(重写超类的一个方法)更改“parse_url”方法的名称时,链接提取器会获取主页的所有链接,但不会跟随这些链接。如果我不更改方法名,spider将无法工作。我做错什么了吗 # -*- coding: utf-8 -*- from core.generalSpider import GeneralSpider from scrapy.linkextractors import

我试图从网络中提取所有链接。我的spider是一个名为GeneralSpider的超类的子类。问题是,当我通过parse(重写超类的一个方法)更改“parse_url”方法的名称时,链接提取器会获取主页的所有链接,但不会跟随这些链接。如果我不更改方法名,spider将无法工作。我做错什么了吗

# -*- coding: utf-8 -*-

from core.generalSpider import GeneralSpider
from scrapy.linkextractors import LinkExtractor
from scrapy import log
from scrapy.contrib.spiders import Rule
from scrapy.item import Item, Field

from spiders.settings import GET_ITEMS


class MyItem(Item):
    url = Field()
    text = Field()
    item = Field()


class GetItemsSpider(GeneralSpider):

    name = GET_ITEMS
    start_urls = 'http://www.example.com'
    allowed_domains = ['example.com']
    rules = (Rule(LinkExtractor(allow=()), callback='parse_url', follow=True), )

    def __init__(self, port, **kwargs):
        super(GetItemsSpider, self).__init__(port, **kwargs)

        # User agent
        self.user_agent = Utils.get_random_item_from_list(core_settings.USER_AGENT_LIST)

        # Scrapy logs
        self.log('GetItemsSpider init start_urls= %s  parameters= %s ' %
                 (self.start_urls, str(self.parameters)), level=log.DEBUG)
        self.log('%s init start_urls= %s  parameters= %s ' %
                 (self.name, self.start_urls, str(self.parameters)), level=log.INFO)
        self.log('USER AGENT = %s' % self.user_agent, level=log.INFO)
        self.log('PORT = %s' % self._proxy_port, level=log.INFO)

    def parse_url(self, response):
        items = []
        self.log('GetItemsSpider parse start %s' % response.url, level=log.DEBUG)
        for link in LinkExtractor().extract_links(response):
            item = MyItem()
            item['text'] = link.text
            item['url'] = link.url
            items.append(item)
        return items

没有比这更好的解释了,在文档中,检查警告


只是不要重写
parse

最后,我无法找到代码不起作用的原因,但我找到了另一种解决方案:

def parse_url(self, response):
    self.log('GetItemsSpider parse start %s' % response.url, level=log.DEBUG)
    for link in LinkExtractor().extract_links(response):
        item = MyItem()
        item['text'] = link.text
        item['url'] = link.url
        if condition:
            yield Request(urlparse.urljoin(response.url, link.url), callback=self.parse)
        yield item

此解决方案基于。我希望这会有用

当您将其设置为
parse
时,它是否只是在解析
http://example.com
或更多链接?您是否尝试使用爬行蜘蛛而不是GeneralSpider?规则和链接抽取器与爬行蜘蛛一起工作。当我将其设置为“解析”时,我会在主页中获得所有链接。我尝试使用CrawlSpider代替GeneralSpider,尽管GeneralSpider继承自CrawlSpider有一个使用
callback='parse_item'
方法的文档示例<代码>解析\u url未覆盖
parse