属性错误:'NoneType'对象没有属性'text' for 循环



当我运行程序时:

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()

最新更新