使用 python beautifulsoup 我试图找到所有 <tr>
HTML 页面的标签。但是我想过滤掉任何 <tr>
在 <td>
之一中具有特定类的标签标签。
我试图过滤出 <td>
中具有“警告”类的行使用以下代码标记。
soup = BeautifulSoup(data, 'html.parser')
print(soup.find_all('tr', class_=lambda c: 'Warning' not in c))
我知道它没有过滤掉“警告类”,因为我正在使用 <tr>
在find_all
里面功能,但如果我尝试使用 td
它给了我一个TypeError: argument of type 'NoneType' is not iterable
.
如有任何想法,我们将不胜感激。
from bs4 import BeautifulSoup
data = '''
<tr role="row" class="odd red" data-id="32">
<td role="gridcell" class="Warning">33</td>
<td role="gridcell">Ralph</td>
<td role="gridcell">List 2</td>
<td role="gridcell">FE</td>
<td role="gridcell">07/12/1996</td>
</tr>
<tr role="row" class="even red" data-id="33">
<td role="gridcell">34</td>
<td role="gridcell">Mary</td>
<td role="gridcell">List 2</td>
<td role="gridcell">SOTLTM</td>
<td role="gridcell">08/12/1996</td>
</tr>
<tr role="row" class="odd red" data-id="34">
<td role="gridcell">35</td>
<td role="gridcell">Tom</td>
<td role="gridcell">List 2</td>
<td role="gridcell">SOTLTM</td>
<td role="gridcell">09/12/1996</td>
</tr>
'''
soup = BeautifulSoup(data, 'html.parser')
print(soup.find_all('td', class_=lambda c: 'Warning' not in c))
最佳答案
class=
不是大多数 <td>
的属性元素。这导致 c
设置为 None
在你的 lambda 中,这样你就可以通过条件测试自动让它们通过过滤器:
print(soup.find_all('td', class_=lambda c: not c or 'Warning' not in c))
# ^^^^^^^^
输出
[<td role="gridcell">Ralph</td>,
<td role="gridcell">List 2</td>,
<td role="gridcell">FE</td>,
<td role="gridcell">07/12/1996</td>,
<td role="gridcell">34</td>,
<td role="gridcell">Mary</td>,
<td role="gridcell">List 2</td>,
<td role="gridcell">SOTLTM</td>,
<td role="gridcell">08/12/1996</td>,
<td role="gridcell">35</td>,
<td role="gridcell">Tom</td>,
<td role="gridcell">List 2</td>,
<td role="gridcell">SOTLTM</td>,
<td role="gridcell">09/12/1996</td>]
从那里开始,我们可以根据您的主要关注点应用此条件,即过滤 <tr>
根据他们的 child 的元素:
soup = BeautifulSoup(data, 'html.parser')
for tr in soup.find_all('tr'):
if not bool(tr.find_all('td', class_=lambda c: c and 'Warning' in c)):
print(tr) # or print(tr.find_all('td')) if you'd like to
# access only the children of the filtered <tr>s
输出
<tr class="even red" data-id="33" role="row">
<td role="gridcell">34</td>
<td role="gridcell">Mary</td>
<td role="gridcell">List 2</td>
<td role="gridcell">SOTLTM</td>
<td role="gridcell">08/12/1996</td>
</tr>
<tr class="odd red" data-id="34" role="row">
<td role="gridcell">35</td>
<td role="gridcell">Tom</td>
<td role="gridcell">List 2</td>
<td role="gridcell">SOTLTM</td>
<td role="gridcell">09/12/1996</td>
</tr>
关于python - 确定 TD 标签内的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55636434/