scrapy ValueError:请求URL中缺少方案:

l3zydbqr  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(150)

我正试图让scrapy遵循链接的产品部分的一个网站,我刮。问题是链接不包括在html中的基本网址,我不知道如何让scrapy遵循我的产量方法。
我看到你可以使用一个叫urljoin的东西,但似乎不能让它工作。我还尝试创建一个名为baseurl的变量,并尝试添加baseurl + product,但都没有成功。
我的代码如下所示:

import scrapy

class MySpider(scrapy.Spider):
    name = "myscraper"
    start_urls = ['https://www.example.ca/product-search?s=true&=964%2C965'] 

def parse(self, response):
    for product in response.css("ol.unitList > li.unit > div.unit-title-wrapper > div.unit-title > a::attr('href')"):
        yield scrapy.Request(url=product.get(), callback=self.parseInnerPage)

def parseInnerPage(self, response):
    print(response.text)

在添加yield部分之前,我可以打印product部分中的所有URL,结果如下所示:

/product/product-1-url
/product/product-2-url
/product/product-3-url
/product/product-4-url
/product/product-5-url
/product/product-6-url
...

但是当我加上收益率方法时我得到

ValueError: Missing scheme in request url: /product/product-1-url

我认为有一点很重要,example.ca的主页上没有产品页面。我只需要将example.ca添加到结果的开头,这样我就可以跟踪它们。

puruo6ea

puruo6ea1#

ChatGPT 4已经完成了。解决方案:

import scrapy

class MySpider(scrapy.Spider):
    name = "myscraper"
    start_urls = ['https://www.example.ca/product-search?s=true&=964%2C965'] 

def parse(self, response):
    for product in response.css("ol.unitList > li.unit > div.unit-title-wrapper > div.unit-title > a::attr('href')"):
            absolute_url = response.urljoin(product.get())
            yield scrapy.Request(url=absolute_url, callback=self.parseInnerPage)

def parseInnerPage(self, response):
    print(response.text)

相关问题