scrapy 属性错误:'Response'对象没有python的属性'body_as_unicode'

h7wcgrx3  于 2022-11-09  发布在  Python
关注(0)|答案(3)|浏览(313)

我正在努力与React在scrappy和不断得到这个消息。
我只给出了发生错误的代码片段。我正在尝试浏览不同的网页,需要获得该特定网页中的页面数。所以我创建了一个响应对象,在该对象中,我获得了next按钮的href,但继续获得AttributeError: 'Response' object has no attribute 'body_as_unicode'
代码。

from scrapy.spiders import Spider
from scrapy.selector import Selector
from scrapy.http import Request
from scrapingtest.items import ScrapingTestingItem
from collections import OrderedDict
import json
from scrapy.selector.lxmlsel import HtmlXPathSelector
import csv
import scrapy
from scrapy.http import Response

class scrapingtestspider(Spider):
    name = "scrapytesting"
    allowed_domains = ["tripadvisor.in"]
 #   base_uri = ["tripadvisor.in"]

    def start_requests(self):
        site_array=["http://www.tripadvisor.in/Hotel_Review-g3581633-d2290190-Reviews-Corbett_Treetop_Riverview-Marchula_Jim_Corbett_National_Park_Uttarakhand.html"
                    "http://www.tripadvisor.in/Hotel_Review-g297600-d8029162-Reviews-Daman_Casa_Tesoro-Daman_Daman_and_Diu.html",
                    "http://www.tripadvisor.in/Hotel_Review-g304557-d2519662-Reviews-Darjeeling_Khushalaya_Sterling_Holidays_Resort-Darjeeling_West_Bengal.html",
                    "http://www.tripadvisor.in/Hotel_Review-g319724-d3795261-Reviews-Dharamshala_The_Sanctuary_A_Sterling_Holidays_Resort-Dharamsala_Himachal_Pradesh.html",
                    "http://www.tripadvisor.in/Hotel_Review-g1544623-d8029274-Reviews-Dindi_By_The_Godavari-Nalgonda_Andhra_Pradesh.html"]

        for i in range(len(site_array)):
            response = Response(url=site_array[i])
            sites = Selector(response).xpath('//a[contains(text(), "Next")]/@href').extract()
 #           sites = response.selector.xpath('//a[contains(text(), "Next")]/@href').extract()
            for site in sites:
                yield Request(site_array[i],self.parse)

`

jljoyd4f

jljoyd4f1#

在这种情况下,发生错误的行需要TextResponse对象,而不是正常响应。尝试创建TextResponse而不是正常的Response来解决错误。
此处记录了缺少的方法。
更具体地说,使用HtmlResponse,因为您的响应将是一些HTML而不是纯文本。HtmlResponseTextResponse的子类,因此它继承了缺少的方法。
还有一件事你在哪里设置Response的主体?如果没有任何主体,你的xpath查询将不会返回任何结果。就你的问题中的示例而言,你只设置了URL,而没有设置主体。这就是为什么你的xpath不会返回任何结果。

y4ekin9u

y4ekin9u2#

这并不能真正回答这个问题,但可以用来查找返回的响应对象的问题。我将它作为答案添加进来,以便它可以帮助某些人调试他们所面临的问题。
我也曾遇到过类似的错误:AttributeError: 'HtmlResponse' object has no attribute 'text'当我这样做时:

scrapy shell 'http://example.com'
>>>response.text

为了找出问题所在,我使用以下命令检查了返回的响应对象中存在的属性:

response.__dict__

但是,__dict__不会返回由于对象的父类而附加的属性。
我收到的响应对象的属性为_body,其中包含该页面的html。

k2arahey

k2arahey3#

这是一个2022年的回应,因为这个问题首先在谷歌上弹出的错误。
TextResponse.body_as_unicode已过时并被删除(link),因此请改用TextResponse.text

相关问题