【问题标题】:AttributeError: 'Selector' object has no attribute 'find' (Scrapy)AttributeError: 'Selector' 对象没有属性 'find' (Scrapy)
【发布时间】:2019-01-07 16:23:08
【问题描述】:

我得到的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 的文档和源代码并没有产生任何结果。

任何建议将不胜感激!

【问题讨论】:

  • 导致此错误的确切网址是什么?

标签: python scrapy


【解决方案1】:

触发错误的因素

  • 你使用的环境python27
  • 您已将 scrapy.selector 对象发送到 urljoin

如何重新触发错误

  • 激活anaconda python2.7环境

    • 使用目标 url www.bing.com 打开一个scrapy shell

      scrapy shell www.bing.com
      
    • scrapy.selector 导入Selector 使用:

      from scrapy.selector import Selector
      
    • 根据您的响应创建一个Selector 对象

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

      response.urljoin(selector_obj)
      
    • 出现同样的错误

如何解决您的错误

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

    for url in links:
        link_url = response.urljoin(url)
    
  • 使用python3.x代替python2.7,当scrapy用python3.x运行时,会报错清晰易懂。 (这里是python36环境下同样的错误)

【讨论】:

  • 这解决了它 - 非常感谢您的所有帮助!我真诚地感谢它:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
相关资源
最近更新 更多