我有这个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 CODE:
<!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>
答案 0 :(得分:1)
使用lxml
解析器(即soup = BeautifulSoup(data, 'lxml')
),您可以将.find
与多个类一起使用,就像查找嵌套的div一样简单:
soup.find('div',{'class':'chat-message-content selectable'}).text
只要该类的出现是html中唯一的一行,上面的行应该对你有用。