我想要找寻所有嵌套在 <ol class="messageList" id="messageList">
中的 <li>
元素。我已经尝试了以下几种方法,但它们都返回了0条消息:
messages = soup.find_all("ol")
messages = soup.find_all('div', class_='messageContent')
messages = soup.find_all("li")
messages = soup.select('ol > li')
messages = soup.select('.messageList > li')
完整的HTML内容可以在这个gist中查看。
我有两点疑问:
- 正确获取这些列表项的方法是什么?
- 在BeautifulSoup中,是否必须知道元素的嵌套路径才能获取到目标元素?或者说,使用类似
soup.find_all("li")
的方式本应返回所有 <li>
元素,无论它们是否被嵌套?
我也欢迎不使用bs4的解决方案。
更新:
我是这样加载代码的:
from bs4 import BeautifulSoup
# 读取HTML内容
with open('/tmp/property.html', 'r', encoding='utf-8') as file:
html_content = file.read()
# 创建BeautifulSoup对象并指定解析器
soup = BeautifulSoup(html_content, 'html.parser')
文件内容就是上面gist链接中的那个。
更新2:
我使用 requests
库解决了问题。看起来手动下载文件可能导致部分HTML结构损坏了?
import requests
from bs4 import BeautifulSoup
url = "https://www.propertychat.com.au/community/threads/melbourne-property-market-2024.75213/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
messages = soup.select('.messageList > li')