result = soup.find('span', {'id': 'dlROA_ctl35_lblROALINE'}).get_text()
我想通过使用变量使其动态化来做与上述相同的事情。我正在使用以下代码,但它不起作用:
i = 135
idstring = 'dlROA_ct'+str(i)+'_lblROALINE'
dict1 = {'id': idstring}
result = soup.find('span', dict1).get_text()
我收到错误:“AttributeError:’NoneType’ 对象没有属性 ‘get_text’”
你的代码的逻辑是正确的,但你收到 AttributeError
的原因是 soup.find
返回了 None
,表明它没有找到与指定条件匹配的 <span>
元素。这里有几个可能的原因和解决办法:
id
值为 dlROA_ct135_lblROALINE
的 <span>
元素。如果 HTML 中没有此元素,soup.find
会返回 None
。验证:打印生成的 idstring
和整个 HTML 文档的一部分,确保 id
是否正确并且元素是否存在。
py
print(idstring)
print(soup.prettify()) # 或者只打印相关部分的 HTML
HTML 内容未正确加载
soup
是用有效的 HTML 初始化的。例如,如果 HTML 是动态加载的,你需要使用像 Selenium 或 Playwright 这样的工具来加载完整的页面。解决方法:打印 soup.prettify()
,查看 HTML 内容是否完整。
ID 的格式问题
id
格式不完全符合预期,生成的 idstring
可能与实际 id
不匹配。例如,可能有额外的空格或不同的拼写。验证:检查 idstring
和实际 HTML 内容的 id
是否完全一致。
py
print(f"Generated ID: {idstring}")
.find
找不到匹配的元素
soup.find
确实找不到任何匹配的 <span>
,你可以先检查返回值是否为 None
,以避免 AttributeError
:py
result_element = soup.find('span', {'id': idstring})
if result_element is None:
print(f"No element found for id: {idstring}")
else:
result = result_element.get_text()
print(result)
如果你已经确认 HTML 是正确的,并且 id
符合格式,但仍然无法找到匹配的 <span>
,可能需要进一步处理 HTML 或动态 ID。例如:
i = 135
idstring = f'dlROA_ct{i}_lblROALINE' # 使用 f-string 更简洁
dict1 = {'id': idstring}
result_element = soup.find('span', dict1)
if result_element:
result = result_element.get_text()
print(result)
else:
print(f"Element with id {idstring} not found.")
if 'dlROA_ct135_lblROALINE' in soup.prettify():
print("ID is present in the HTML.")
else:
print("ID not found in the HTML.")
考虑使用工具如 Selenium 来获取完整的页面内容:
from selenium import webdriver
from bs4 import BeautifulSoup
driver = webdriver.Chrome() # 或其他 WebDriver
driver.get('https://example.com') # 替换为实际 URL
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
# 继续使用你的代码
idstring
的格式是否正确,与实际 HTML 一致。soup.find
返回的值是否为 None
,以避免直接调用 .get_text()
。