我有这段 HTML 代码,我正在为其创建脚本:
http://imgur.com/a/dPNYI
我想提取突出显示的文本(“一些文本”)并打印出来。
我尝试遍历每个嵌套的 div 以找到我需要的 div,如下所示:
import requests
from bs4 import BeautifulSoup
url = "the url this is from"
r = requests.get(url)
for div in soup.find_all("div", {"id": "main"}):
for div2 in div.find_all("div", {"id": "app"}):
for div3 in div2.find_all("div", {"id": "right-sidebar"}):
for div4 in div3.find_all("div", {"id": "chat"}):
for div5 in div4.find_all("div", {"id": "chat-messages"}):
for div6 in div5.find_all("div", {"class": "chat-message"}):
for div7 in div6.find_all("div", {"class": "chat-message-content selectable"}):
print(div7.text.strip())
我实现了我在指南和在线类似问题中看到的内容,但我敢打赌这还差得远,一定有更简单的方法。
这行不通。它不打印任何东西,我有点迷路了。如何打印突出显示的行(这实际上是 div 的第一个 div 子元素,其 id 为“chat-messages”)?
HTML 代码:
<!DOCTYPE html>
<html>
<head>
<title>
</title>
</head>
<body>
<div id="main">
<div data-reactroot="" id="app">
<div class="top-bar-authenticated" id="top-bar">
</div>
<div class="closed" id="navigation-bar">
</div>
<div id="right-sidebar">
<div id="chat">
<div id="chat-head">
</div>
<div id="chat-title">
</div>
<div id="chat-messages">
<div class="chat-message">
<div class="chat-message-avatar" style="background-image: url("https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/65/657dcec97cc00bc378629930ecae1776c0d981e0.jpg");">
</div>
<a class="chat-message-username clickable">
<div class="iron-color">
aloe
</div></a>
<div class="chat-message-content selectable">
<!-- react-text: 2532 -->some text<!-- /react-text -->
</div>
</div>
<div class="chat-message">
</div>
<div class="chat-message">
</div>
<div class="chat-message">
</div>
<div class="chat-message">
</div>
<div class="chat-message">
</div>
最佳答案
使用 lxml
解析器(即 soup = BeautifulSoup(data, 'lxml')
),您可以将 .find
与多个类一起使用,就像查找嵌套 div 就像单个类一样简单:
soup.find('div',{'class':'chat-message-content selectable'}).text
只要该类的出现是 html 中的唯一一个,上面的行就应该适合您。
关于python - 使用 BeautifulSoup 提取特定的嵌套 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45601680/