微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

请求网址必须为str或unicode,列表错误?

如何解决请求网址必须为str或unicode,列表错误?

我遇到以下错误:“请求网址必须为str或unicode,获取列表”

起始网址为“ https://www.zomato.com/istanbul/restaurants?page=1”

import scrapy

def parse(self,response):
    all_css = response.css('.search_left_featured')
    all_product = all_css.css('a::attr(href)').extract()

    yield scrapy.Request(all_product,callback=self.parse_dir_contents)

    max_page_number = 10
    for i in range(1,max_page_number):
        url_next = 'https://www.zomato.com/istanbul/restaurants?page=' + str(i)+''
        yield scrapy.Request(url_next,callback=self.parse)

def parse_dir_contents(self,response):
    items = ZomatodataItem()

    name = response.css('.iNaazl::text').extract()
    genre =response.css('.PhzdX::text').extract()
    location =response.css('.gqeQEx::text').extract()
    tags = response.css('.cunMUz::text').extract()
    address = response.css('.clKRrC::text').extract()
    phone = response.css('.kKemRh::text').extract()

    items['name']= name
    items['genre']= genre
    items['location']= location
    items['tags']= tags
    items['address']= address
    items['phone_number']= phone

    yield items

解决方法

您的问题是什么?错误似乎很明显:.css返回一个SelectorList,其extract方法返回一个list,然后将其传递给需要URL的Request,哪个不是列表。

要么迭代结果,要么使用scrapy的.get().getall()方法(更现代,更容易混淆),extract()已弃用(因为在scrapy中已不再使用它了它的文档),因为它的行为取决于在Selector(返回字符串)或SelectorList(返回列表)上的调用而有所不同。

地狱,都做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。