web-scraping - 如何使用漂亮的汤从保存的 html 页面中删除 td 行号和行内容类
问题描述
我通过查看源代码保存了网页 html 内容。我这样做是因为我无法连接到网页,因为它处于 citrix 环境中。我遇到的问题是,当我读取保存的html
文件并使用漂亮的汤来读取内容时,它创建了一个额外的表格元素,该元素在 td 元素中具有实际的 html 内容。
我检查了这一点,因为起初我试图简单地使用该find_all
函数来查找h2
元素,但它是一个空列表。相反,我必须先找到html
, body
,table
元素,然后从那里我能够td
从其中的页面中获取所有具有实际 html 内容的元素,就像这样;
from bs4 import BeautifulSoup
url = open("C:\\Users\\m\Documents\common\\cramer.html")
content = url.read()
soup = BeautifulSoup(content, "lxml")
html = soup.find('html')
body = html.find('body')
table = body.find('table')
tds = table.find_all('td')
这会产生;
[
<td class="line-number" value="380"></td>,
<td class="line-content"><span class="html-tag"></tr></span></td>,
<td class="line-number" value="381"></td>,
<td class="line-content"><span class="html-tag"></table></span></td>,
<td class="line-number" value="382"></td>,
<td class="line-content"><span class="html-tag"></div></span></td>,
<td class="line-number" value="383"></td>,
<td class="line-content"><span class="html-end-of-file"></span></td>]
可以看出,它创建了两个额外的td
元素,一个带有“line-number”类,另一个带有“line-content”类,其中包含元素内站点页面的实际html内容span
。有没有正确的方法来获得这个而不是介于两者<
之间>
?
解决了
我是从视图页面源中保存它的。相反,我只需要另存为。
解决方案
我可以通过在页面上右键单击鼠标然后单击“另存为..”(热键Ctrl+s
)而不是右键单击鼠标然后单击“查看页面源代码”(热键Ctrl+U
)来解决此问题,这会打开代码的源页面。
所以使用代码;
from bs4 import BeautifulSoup
from pathlib import Path
data_folder = Path("C:/Users/user/common/")
file_to_open = data_folder / "mbh.html"
content = open(file_to_open)
content = content.read()
soup = BeautifulSoup(content, "lxml")
在没有额外表格元素的情况下使用soup.find('div',{'class':'content'})
产生了正确的结果;
In [5]: soup.find('div',{'id':'content'})
Out[5]:
<div id="content">
<h1>Some content Header</h1>
<p class="info">Some info, many more elements</p>
推荐阅读
- regex - 在 TestCafe 的 .withText API 中使用字符串和正则表达式时遇到问题
- javascript - 需要获取静态文件的状态
- scala - 从csv文件在scala中创建案例类
- java - 如何在 DSL json 中的注释处理期间启用未知类型
- keras - 我可以动态更改 Keras 中神经网络的学习率吗?
- azure-ad-b2c - 使用 Graph API 在 Azure AD B2C 中创建帐户时如何强制电子邮件地址验证?
- highcharts - Highcharts:具有不同比例范围的堆积条形图
- wordpress - Timber+Twig:检查模板类型
- c# - 对 SSIS 的卷曲请求
- javascript - 如何在 jQuery 函数的回调中引用元素?