来自 python 脚本进程的 Scrapy 运行 仅启动 url

Scrapy running from python script processes only start url

我写了一个Scrapy CrawlSpider

class SiteCrawlerSpider(CrawlSpider):
    name = 'site_crawler'

    def __init__(self, start_url, **kw):
        super(SiteCrawlerSpider, self).__init__(**kw)

        self.rules = (
            Rule(LinkExtractor(allow=()), callback='parse_start_url', follow=True),
        )
        self.start_urls = [start_url]
        self.allowed_domains = tldextract.extract(start_url).registered_domain

    def parse_start_url(self, response):
        external_links = LinkExtractor(allow=(), deny=self.allowed_domains).extract_links(response)
        for link in external_links:
            i = FastcrawlerItem()
            i['pageurl'] = response.url
            i['ext_link'] = link.url
            i['ext_domain'] = tldextract.extract(link.url).registered_domain                
            yield i

现在我正尝试从另一个 Python 脚本 运行 此脚本,如下所示:

from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals
from scrapy_fastcrawler.spiders.site_crawler import SiteCrawlerSpider
from scrapy.utils.project import get_project_settings

spider = SiteCrawlerSpider(start_url='http://www.health.com/')
settings = get_project_settings()
crawler = Crawler(settings)
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()

问题:一切 运行 都很好,但这里的主要问题是脚本仅处理 'start_url' 并停止。它不会抓取并移动到在开始 url 上找到的其他链接,并且不会进行任何处理。我还设置了管道,start_url 中的项目已正确保存到管道设置中。

非常感谢任何帮助。

当您覆盖爬网蜘蛛的默认值 parse_start_url 时,该方法必须生成 Request 以供蜘蛛跟随,否则它哪儿也去不了。

子类化时不需要实现此方法 CrawlSpider,从代码的其余部分来看,您似乎真的不想;尝试将您定义的方法更改为 parse_page 之类的方法(只是不要将其称为 parse)。