【问题标题】:Using Scrapy, cannot crawl links past my starting url使用 Scrapy,无法抓取超过我的起始网址的链接
【发布时间】:2012-08-29 21:05:06
【问题描述】:

我一直在努力抓取一个网站,但被卡住了。我需要从一个 url 开始,并抓取源自它的所有后续 url,以及源自这些的所有 url,等等,尽可能细化。我搜索了以前的帖子,但仍然找不到解决问题的方法。

运行我的代码后,它会从我的起始 url 中抓取链接,但不会抓取起始 url 上的链接。我一直在尝试解决这个问题,但无法解决。

我相信我的问题可能与我正在设置但不确定的规则有关。我已经删除了允许的域,并确保在我的代码中包含了 follow=True,并且我知道包含 callback=parse 会是一个问题,但似乎包含 callback='parse_item' 不是,我我也试过删除它,没有什么区别。

我没有对管道或设置文件夹进行更改,因为我不确定我会对它们做什么。我的项目非常标准,它是一个字段,我使用它来加载它,从 hospitalone.items 导入 HospitaloneItem。我的其余代码如下:

class HopitaloneSpider(CrawlSpider):
    name = 'example.org'
    #allowed_domains = ['http://>example.org/']
    start_urls = [
        'http://example.org/'
    ]

    rules = (
        #Rule(SgmlLinkExtractor(allow='>example\.org', )),
        Rule(SgmlLinkExtractor(allow=('\w+$', )), callback='parse_item', follow=True),
    )

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        item = HospitaloneItem()
        item['name'] = hxs.select('//a').extract()
        return item

任何帮助都会很棒。非常感谢。

【问题讨论】:

    标签: python scrapy web-crawler


    【解决方案1】:

    我认为问题是因为您使用的是 CrawlSpider,所以您不能覆盖 parse 方法。 这是一个可能对您有所帮助的链接:http://doc.scrapy.org/en/latest/topics/spiders.html#crawling-rules

    按照示例实现不同的解析函数

    【讨论】:

    • 减号是正确的,您不应该覆盖parse 函数,此外您还定义了parse_item 作为规则中的回调。如果您相应地更改当前解析函数的名称,您的蜘蛛可能会工作。还要检查正则表达式。
    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多