我需要从每个<tr>
的第一个<td>
元素中获取文本。但不是所有文本,只有标记<a>
内部和任何其他标记外部的文本。我把必要的文本写成了“yyy”/“y”,把不必要的写成了“zzz”
<table>
<tbody>
<tr>
<td>
<b>zzz</b>
<a href="#">yyy</a>
"y"
<a href="#">yyy</a>
<sup>zzz</sup>
<a href="#">yyy</a>
<a href="#">yyy</a>
"y"
</td>
<td>
zzzzz
</td>
</tr>
</tbody>
</table>
这是我目前所拥有的
words = []
for tableRows in soup.select("table > tbody > tr"):
tableData = tableRows.find("td").text
text = [word.strip() for word in tableData.split(' ')]
words.append(text)
print(words)
但是这段代码正在解析<td>
:["zzz", "yyyy", "yyyy", "zzz", "yyyy"]
中的所有文本。
2条答案
按热度按时间g9icjywg1#
尝试:
打印:
soup.select("td:nth-of-type(1)")
仅选择第一个<td>
。<td>
的.contents
if isinstance(c, Tag) and c.name == "a"
检查内容是否为Tag
,以及Tag
的名称是否为<a>
if isinstance(c, NavigableString)
检查内容是否为纯字符串。fd3cxomn2#
根据您的示例,使用
td
标记的children
。然后选中名为a
的子项为None。然后检查是否有子级文本,然后添加。输出: