scrapy中parse调用另外一个parse报错

def parse(self, response):
        li_list = response.css("div.list_cont.Left_list_cont.Left_list_cont1 > div.tab_tj > div > div > ul > li")
        for li in li_list:
            item = CardItem()
            item['href'] = li.css("a::attr(href)").extract()
            item['title'] = li.css("a::attr(title)").extract()
            scrapy.Request(url=item['href'],
             callback=self.detail_parse, headers=self.headers) # 此行运行报错
            yield item
            
def detail_parse(self, response):
        print("ok")
        pass

错误信息为:

Traceback (most recent call last):
  File "d:\softs\python\python36-32\lib\site-packages\scrapy\utils\defer.py", line 102, in iter_errback
    yield next(it)
  File "d:\softs\python\python36-32\lib\site-packages\scrapy\spidermiddlewares\offsite.py", line 30, in process_spider_output
    for x in result:
  File "d:\softs\python\python36-32\lib\site-packages\scrapy\spidermiddlewares\referer.py", line 339, in <genexpr>
    return (_set_referer(r) for r in result or ())
  File "d:\softs\python\python36-32\lib\site-packages\scrapy\spidermiddlewares\urllength.py", line 37, in <genexpr>
    return (r for r in result or () if _filter(r))
  File "d:\softs\python\python36-32\lib\site-packages\scrapy\spidermiddlewares\depth.py", line 58, in <genexpr>
    return (r for r in result or () if _filter(r))
  File "E:\Project\python\win4000-images-crawler\tutorial\spiders\run_spider.py", line 27, in parse
    yield scrapy.Request(url=item['href'], callback=self.detail_parse, headers=self.headers)
  File "d:\softs\python\python36-32\lib\site-packages\scrapy\http\request\__init__.py", line 25, in __init__
    self._set_url(url)
  File "d:\softs\python\python36-32\lib\site-packages\scrapy\http\request\__init__.py", line 56, in _set_url
    raise TypeError('Request url must be str or unicode, got %s:' % type(url).__name__)
TypeError: Request url must be str or unicode, got list:
阅读 5.3k
1 个回答

已解决

 def parse(self, response):
        li_list = response.css("div.list_cont.Left_list_cont.Left_list_cont1 > div.tab_tj > div > div > ul > li")
        url_list = []
        for li in li_list:
            item = CardItem()
            href = li.css("a::attr(href)").extract_first()
            item['href'] = href
            item['title'] = li.css("a::attr(title)").extract_first()
            url_list.append(href)
            yield item
        for i in url_list:
            print("->>> %s" % i)
            yield scrapy.Request(url=i, callback=self.detail_parse, headers=self.headers)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题