我是学习Python并尝试制作网络抓取应用程序的新手,但遇到以下错误。这不是完整的代码,但是如果没有首先解决此问题,我将无法继续。
任何帮助将不胜感激!
AttributeError:'NoneType'对象没有属性'get_text'
import requests
from bs4 import BeautifulSoup
url = "https://www.amazon.co.uk/b?node=13978643031&pf_rd_r=7WY9X56GFTSX0ZTD0VQQ&pf_rd_p=7510143e-2d7f-4e64-a435-f4e242b0abc4"
headers = {
"user-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"}
price = 389
def getPrice():
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find(id="productTitle").get_text().strip()
print(title)
if __name__ == "__main__":
getPrice()
错误:
跟踪(最近一次通话):文件“ /Users/sumeet/vs_code_py/app.py”,第18行,位于getPrice()中文件“ /Users/sumeet/vs_code_py/app.py”,第13行,位于getPrice标题=soup.find(id =“ productTitle”)。get_text()。strip()AttributeError:'NoneType'对象没有属性'get_text'
问题可能是BeautifulSoup.find()
方法未在id='productTitle'
中找到任何内容,因此您试图获取不存在的元素的文本,该元素在Python中表示为原语None
。您需要使用if/else
或try/except
添加一些逻辑来适应这种可能性(假设这实际上可以在其他页面上使用?如果不是,那么您不是在寻找正确的东西)
[此外,如果要搜索的元素是由Javascript创建的(看起来像这样),则在注释中也有标记,那么找不到它的原因是因为它在抓取的阶段不存在。您需要类似Selenium之类的东西才能真正执行Javascript。