【问题标题】:How to pass start_urls to scrapy如何将 start_urls 传递给scrapy
【发布时间】:2021-11-05 03:23:29
【问题描述】:

根据here的建议,我正在尝试:

scrapy crawl spider-name -a start_urls="https://start-url.com/"

我明白了:

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/scrapy/core/engine.py", line 129, in _next_request
    request = next(slot.start_requests)
  File "/usr/local/lib/python3.9/site-packages/scrapy/spiders/__init__.py", line 77, in start_requests
    yield Request(url, dont_filter=True)
  File "/usr/local/lib/python3.9/site-packages/scrapy/http/request/__init__.py", line 25, in __init__
    self._set_url(url)
  File "/usr/local/lib/python3.9/site-packages/scrapy/http/request/__init__.py", line 73, in _set_url
    raise ValueError(f'Missing scheme in request url: {self._url}')

要重现,请运行以下命令:

scrapy startproject example_project
cd example_project
scrapy genspider spider1 https://stackoverflow.com
scrapy crawl spider1 -a start_urls="https://stackoverflow.com"

【问题讨论】:

  • 请分享代码
  • 我编辑了这个问题,并包含了一个类似的例子

标签: python scrapy


【解决方案1】:

命令scrapy genspider 生成此代码:

import scrapy


class Spider1Spider(scrapy.Spider):
    name = 'spider1'
    allowed_domains = ['https://stackoverflow.com']
    start_urls = ['https://stackoverflow.com/']

    def parse(self, response):
        pass

这不会将start_urls 作为命令行参数处理。为此,请按照您链接的指南进行操作。类似的东西

import scrapy


class Spider1Spider(scrapy.Spider):
    name = 'spider1'
    allowed_domains = ['https://stackoverflow.com']

    def __init__(self, *args, **kwargs):
        super(Spider1Spider, self).__init__(*args, **kwargs)
        self.start_urls = kwargs.get('start_urls').split(',')

    def parse(self, response):
        pass

会起作用的。

注意:self.start_urls 需要一个列表,所以如果收到一个字符串,它会报错。

【讨论】:

  • 我认为这可以在没有明确定义 self.start_urls = ... 的情况下暗示,或者可能已经存在某种方式来实现相同的结果。
  • 不是隐式处理的,不是。在此处查看scrapy.Spiderstart_urls 的文档:docs.scrapy.org/en/latest/topics/spiders.html#scrapy-spider。明确指定 url 是唯一的方法。
  • 由于这个答案和here 的答案没有区别,这可能被认为是重复的,所以我可以关闭这个问题。
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
相关资源
最近更新 更多