首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scrapy + Splash: request : render.html中缺少方案,但url的有方案

Scrapy + Splash: request : render.html中缺少方案,但url的有方案
EN

Stack Overflow用户
提问于 2017-05-31 20:59:28
回答 1查看 1.3K关注 0票数 2

我试图使用以下代码从本站中刮取产品名称和价格:

代码语言:javascript
运行
复制
class ProductSpider(scrapy.Spider):
name = 'product'

start_urls = ['https://www.bodyenfitshop.nl/']

def parse(self, response):
    # follow links to different categories
    for href in response.css('ol.nav-primary > li.category-node > a::attr(href)'):
        # A category page currently does not list all the items belonging to that category.
        # Add "?p=1" to get the list view
        href = href.extract() + "?p=1"
        print(href)
        yield SplashRequest(href, self.parse_category, args={
            'wait': 0.5
        })

def parse_category(self, response):
    for product in response.css('li.item'):
        new_name = product.css('div.product-name > a::text').extract_first().strip()
        # TODO: find better regex
        new_price = float(product.css('span.price::text').re('\d+,\d+')[0].replace(",", "."))
        new_url = product.css('div.product-name > a::attr(href)').extract_first().strip()
        yield Product(name=new_name, price=new_price, url=new_url)

我怀疑问题在于传递给SplashRequest的href,但当我打印出它们时,它们都有如下所示的完全合格的URLS:

https://www.bodyenfitshop.nl/duursport/?p=1 https://www.bodyenfitshop.nl/workouts/?p=1 https://www.bodyenfitshop.nl/aminozuren/?p=1

关于这个错误的所有其他问题(比如)都可以通过将"https“添加到它们的URL中来解决,但是我已经有了这些。所以我不知道是什么导致了这些。

这是我得到的错误之一(重复多次)。

代码语言:javascript
运行
复制
2017-05-31 22:51:07 [scrapy.core.scraper] ERROR: Error downloading <GET https://www.

bodyenfitshop.nl/afslanken/?p=1 via https://www.bodyenfitshop.nl/afslanken/?p=1>
Traceback (most recent call last):
  File "c:\program files (x86)\python\lib\site-packages\twisted\internet\defer.py", line 1301, in _inlineCallbacks
    result = g.send(result)
  File "c:\program files (x86)\python\lib\site-packages\scrapy\core\downloader\middleware.py", line 37, in process_request
    response = yield method(request=request, spider=spider)
  File "c:\program files (x86)\python\lib\site-packages\scrapy_splash\middleware.py", line 358, in process_request
    priority=request.priority + self.rescheduling_priority_adjust
  File "c:\program files (x86)\python\lib\site-packages\scrapy\http\request\__init__.py", line 94, in replace
    return cls(*args, **kwargs)
  File "c:\program files (x86)\python\lib\site-packages\scrapy_splash\request.py", line 76, in __init__
    **kwargs)
  File "c:\program files (x86)\python\lib\site-packages\scrapy\http\request\__init__.py", line 25, in __init__
    self._set_url(url)
  File "c:\program files (x86)\python\lib\site-packages\scrapy\http\request\__init__.py", line 58, in _set_url
    raise ValueError('Missing scheme in request url: %s' % self._url)
ValueError: Missing scheme in request url: render.html

render.html (我认为)是Splash产生的东西的默认名称。我想我改变不了这一点。

任何帮助或戳在正确的方向是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2019-09-24 10:12:24

在我的例子中,这是因为我忘了把https://放到SPLASH_URL

所以应该是SPLASH_URL = https://yourdomain.com:8050

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44294579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档