gpt4 book ai didi

Python2 with Beautiful Soup - 使用多个 CSS 类过滤元素

转载 作者:行者123 更新时间:2023-11-30 22:30:36 25 4
gpt4 key购买 nike

我正在尝试让 BS4 过滤掉包含特定类的元素。这是我的 HTML:

<!-- language: lang-html -->
<html>
<head>
<title>Test</title>
</head>

<body>

<table>
<tr class='test hidden'><td>foo</td></tr>
<tr class='testabc'><td>bar</td></tr>
<tr class='test hidden'><td>foo</td></tr>
<tr class='testxyz'><td>bar</td></tr>
</table>

</body>

</html>

还有我的 Python 代码:

# import libraries
import urllib2
import re
from bs4 import BeautifulSoup
from bs4 import Comment
import operator

with open('sample.html', 'r') as myfile:
html=myfile.read()

soup = BeautifulSoup(html, 'html.parser')
rows = soup.find('table').find_all('tr', class_=lambda x: 'hidden' not in x)

for row in rows:
print row

您可以看到该表包含 class='test hide' 或 class='full' 的行。我试图获取“隐藏”不是元素上的类的所有行。

本质上我希望输出是:

<tr class='testabc'><td>bar</td></tr>   
<tr class='testxyz'><td>bar</td></tr>

相反,我得到了所有行:

<tr class='test123 hidden'><td>foo</td></tr>
<tr class='testabc'><td>bar</td></tr>
<tr class='test456 hidden'><td>foo</td></tr>
<tr class='testxyz'><td>bar</td></tr>

我尝试了“not in”或“!=”的多种组合。我尝试创建一个 lambda 调用的函数,这样我就可以看到 x 是什么类型的对象,并更好地了解如何使用它,但除非我对 lambda 进行硬编码,否则我无法让它工作类似于 lambda x: x == 'testabc' 或 x=='testxyz'

这可以做我正在尝试的事情吗?有人能指出我正确的方向吗?

最佳答案

你可以这样做(获取所有 tr 元素,然后过滤掉你不需要的元素):

from bs4 import BeautifulSoup

html = """
<html>
<head>
<title>Test</title>
</head>

<body>

<table>
<tr class='test hidden'><td>foo</td></tr>
<tr class='testabc'><td>bar</td></tr>
<tr class='test hidden'><td>foo</td></tr>
<tr class='testxyz'><td>bar</td></tr>
</table>

</body>

</html>
"""

soup = BeautifulSoup(html, 'html.parser')
rows = soup.find('table').find_all('tr')

for row in rows:
if 'hidden' not in row.attrs['class']:
print row

输出:

<tr class="testabc"><td>bar</td></tr>
<tr class="testxyz"><td>bar</td></tr>

关于Python2 with Beautiful Soup - 使用多个 CSS 类过滤元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45984035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com