2

我在scrapy中遇到这个错误

   File "/usr/lib/pymodules/python2.7/scrapy/selector/factories.py", line 20, in body_as_utf8
   if response.encoding in utf8_encodings:
   exceptions.AttributeError: 'Response' object has no attribute 'encoding'

导致它的代码只是scrapy spider中的以下代码

 def parse(self, response):
    hxs = HtmlXPathSelector(response)

我正在尝试解析网址

    http://itunes.apple.com/WebObjects/MZStore.woa/wa/customerReviews?id=382034404%0A

使用用户代理字符串

   iTunes/10.2 (Macintosh; U; PPC Mac OS X 10.2)

知道可能是什么错误吗?对我来说似乎很奇怪,这段代码总是在我所有的其他蜘蛛中工作

4

3 回答 3

4

我没有时间调试它,但我的猜测是response这种特殊情况下的论点不是 a HtmlResponseor TextResponse

在回调中做print response.__class__

如果类是scrapy.http.response.Response,那么我猜想该 url 返回一个非文本响应,这显然是没有任何 的字节流encoding,并且您不能在其上使用 xpath。

于 2012-07-11T04:08:58.070 回答
2

不确定这是否超级有用,但也许它可以帮助指导您或其他人。

我遇到了类似的错误:

'Response' 对象没有属性 'elapsed'

通过更新requests依赖项解决了它:

sudo apt-get install python-pip
sudo pip install --upgrade requests

所以也许你有一个提供属性的依赖项encoding

于 2014-04-17T19:43:04.867 回答
0

请尝试这种方式:

def parse(self, response):
    hxs = HtmlXPathSelector(text=response.body)
于 2015-06-05T15:13:57.513 回答