![](/img/trans.png)
[英]AttributeError: 'Response' object has no attribute 'txt' - Python Web Scraping
[英]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
列表。
这样你将在迭代时填充它。
您可以:
在每个循环步骤 ( temp
) 中附加评论的临时列表,然后您将获得reviews = [ [...], [...]]
或
添加带有+
运算符的临时列表,例如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
AttributeError
似乎您正在尝试访问不存在的属性。编辑 1。
links
是一个可迭代的,可以迭代以逐行获取。 这样您就不必读取内存中的所有行。req
有content
和text
属性。 两者都根据编码保存页面 HTML 源代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.