python - AttributeError:'NoneType' 对象没有带有 for 循环的属性 'text'
问题描述
当我运行我的程序时:
import requests
from bs4 import BeautifulSoup
class Data():
def __init__(self):
self.tags = open("tags.txt", "r")
self.tag = "everything"
self.url = "https://www.amazon.com/" + self.tag
self.headers_param = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 OPR/74.0.3911.160"}
self.request = None
self.soup = None
def get_data(self):
for i in range(6):
self.tag = self.tags.readline()
self.request = requests.get(self.url, headers=self.headers_param)
self.soup = BeautifulSoup(self.request.content, "lxml")
self.finder = self.soup.find("div", {"class":"content"}).text
print(self.tag)
print(self.url)
print(self.finder)
i += 1
data = Data()
data.get_data()
我收到此错误:
Traceback (most recent call last):
File "D:/Projects/neo_bot/main.py", line 25, in <module>
data.get_data()
File "D:/Projects/neo_bot/main.py", line 19, in get_data
self.finder = self.soup.find("div", {"class":"content"}).text
AttributeError: 'NoneType' object has no attribute 'text'
如果我删除text
它效果很好,但我需要它。我无法解决我的问题。请帮我!
解决方案
正如上面的评论,你有两个问题
get_data()
不更新 URL 它将始终https://www.amazon.com/everything
使您的选择器不起作用.find()
返回 None 如果没有找到元素所以你不能使用.text
,以避免错误检查它之前
固定代码
class Data():
def __init__(self):
self.tags = open("tags.txt", "r")
self.tag = "everything"
self.url = "https://www.amazon.com/" + self.tag
self.headers_param = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 OPR/74.0.3911.160"}
self.request = None
self.soup = None
def update_url(self):
self.tag = self.tags.readline()
self.url = "https://www.amazon.com/" + self.tag
def get_data(self):
for i in range(6):
self.update_url() # <=== update the url
self.request = requests.get(self.url, headers=self.headers_param)
self.soup = BeautifulSoup(self.request.content, "lxml")
self.finder = self.soup.find("div", {"class":"content"})
if not self.finder: # <== check for NoneType
print('element not found')
self.finder = 'no text'
else:
self.finder = self.finder.text
print(self.tag)
print(self.url)
print(self.finder)
i += 1
data = Data()
data.get_data()
推荐阅读
- azure-data-factory-2 - Azure 数据工厂查找和 For Each
- performance - 根据流量限制Ubuntu中的速度
- javascript - 将日期限制为今天并阻止以前的日期
- wildfly - 并发修改不应记录为错误?
- java - 如何修复 limax.zdb.XError: dbhome "zdb" 不存在?
- c - 使用 C 中的格式说明符从 fprinft 中的 char 缓冲区读取特定范围的索引
- java - maven-metadata.xml 不附加多个 SNAPSHOT
- java - 如何比较两个枚举?
- c - 父母在linux中终止后如何保持孩子的标准输出打开?
- magento - 无法在magento 2中导入产品