首页 > 解决方案 > scrapy python CrawlSpider不爬行

问题描述

import scrapy 
from scrapy.spiders.crawl import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 

class MySpider(CrawlSpider):
    name = 'genericSpider'
    allowed_domains = ['example.com']
    start_urls = [url_1, url_2, url_3]

    rules = [
        Rule(
            LinkExtractor(),                     
            callback='parse',   
            follow=True        
        ),
    ]

    def parse(self, response): 
        hxs = scrapy.Selector(response)
        links = hxs.xpath('*//a/@href').extract()
        for link in links:
            print(link)
        print()

我正在尝试抓取一个网站。对于我的代码示例,我只是提取所有链接并将它们打印到终端。

此过程对 start_urls 中的 url 非常有效,但蜘蛛似乎不会抓取提取的 url。

这就是 CrawlSpider 的重点,对吗?访问一个页面,收集它的链接并访问所有这些链接,直到它用完它们?

我已经被困了几天,任何帮助都会很棒。

标签: pythonscrapyweb-crawler

解决方案


问题是你命名你的方法parse。根据文档,应避免使用此名称,CrawlSpider因为它会导致问题。只需将方法重命名为 eg parse_link(并调整 中的callback参数Rule),它就会起作用。

此外,请记住该allowed_domains属性必须与您要抓取的 URL 匹配。


推荐阅读