AttributeError:'Selector'对象没有属性'find'(Scrapy)

时间:2017-11-11 22:03:40

标签: python scrapy

我得到的scrapy错误是:

  File "/anaconda/lib/python2.7/site-packages/scrapy/http/response/text.py", line 82, in urljoin
    return urljoin(get_base_url(self), url)
  File "/anaconda/lib/python2.7/urlparse.py", line 261, in urljoin
    urlparse(url, bscheme, allow_fragments)
  File "/anaconda/lib/python2.7/urlparse.py", line 143, in urlparse
    tuple = urlsplit(url, scheme, allow_fragments)
  File "/anaconda/lib/python2.7/urlparse.py", line 182, in urlsplit
    i = url.find(':')
AttributeError: 'Selector' object has no attribute 'find'

Scrapy在我的蜘蛛中追溯到这一行:

for url in links:
    link_url = response.urljoin(url)

这一行是一个通用的parse()方法。我之前已经多次运行完全相同的语法并且从未遇到过错误,并且涉及到urllib的文档和源代码并没有产生任何结果。

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

触发错误的因素

  • 您正在使用的环境 python27
  • 您已将 scrapy.selector 对象发送至 urljoin

如何重新触发错误

  • 激活anaconda python 2.7 环境

    • 使用目标网址www.bing.com

      打开scrapy shell
      scrapy shell www.bing.com
      
    • 使用以下内容从Selector导入scrapy.selector

      from scrapy.selector import Selector
      
    • 从您的回复中创建一个Selector对象

      selector_obj = Selector(response=response)
      
    • 使用response.urljoin加入Selector对象

      response.urljoin(selector_obj)
      
    • 发生同样的错误 enter image description here

如何修复错误

  • 使用url或其他技巧检查type()变量,确保您已正确提取所需的字符串

    for url in links:
        link_url = response.urljoin(url)
    
  • 使用python 3.x 而不是python 2.7 ,当scrapy以python 3.x 运行时,错误消息将会出现要清楚易懂。 (这是python36环境中的相同错误)

enter image description here