繁体   English   中英

AttributeError: 'Response' 对象没有属性 'type' - Python Web Scraping Request

[英]AttributeError: 'Response' object has no attribute 'type' - Python Web Scraping Request

目前正在编写一个 webscraper 来抓取一些评论。 目标是在多个 URL 上抓取评论。 因此,我制作了一个网址列表。 我想检索每个 url 的特定评论的内容并将它们合并到一个列表中。 当我只刮一页时,一切都像魅力一样。 但是,当我尝试抓取多个页面时。 看到下面的代码加上错误:

from lxml import html
from urllib import request
import requests
from datetime import datetime
import dateparser
import csv
import re

links = open('file')
urls = links.readlines()

for url in urls:
    req=requests.get(url)
    tree = html.fromstring(request.urlopen(req).read().decode(encoding="utf-8",errors="ignore"))  
    reviews = tree.xpath('//*[@class="review-body"]')
    reviews = [r.text_content() for r in reviews]
    reviews = [r.replace('\n', ' ') for r in reviews]
    reviews = [r.replace('\r', ' ') for r in reviews]
    reviews = [r.replace('                  ', '') for r in reviews]  

protocol = req.type
AttributeError: 'Response' object has no attribute 'type'. 

有人可以向我解释这是什么以及我如何解决这个问题?

您需要在for循环之外拥有reviews列表。

这样你将在迭代时填充它。

您可以:

  1. 在每个循环步骤 ( temp ) 中附加评论的临时列表,然后您将获得reviews = [ [...], [...]]

  2. 添加带有+运算符的临时列表,例如reviews += temp ,这应该会导致您可能期望的结果。

这是可能的解决方案:

from lxml import html
from urllib import request
import requests
from datetime import datetime
import dateparser
import csv
import re

links = open('file', 'r')

reviews = []

for url in links:
    req = requests.get(url)
    tree = html.fromstring(req.content.decode(encoding="utf-8", errors="ignore"))
    temp = tree.xpath('//*[@class="review-body"]')
    temp = [r.text_content() for r in temp]
    temp = [r.replace('\n', ' ') for r in temp]
    temp = [r.replace('\r', ' ') for r in temp]
    temp = [r.replace('                  ', '') for r in temp]
    reviews += temp
  1. 至于AttributeError似乎您正在尝试访问不存在的属性。

编辑 1。

  1. links是一个可迭代的,可以迭代以逐行获取。 这样您就不必读取内存中的所有行。
  2. reqcontenttext属性。 两者都根据编码保存页面 HTML 源代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM