首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Python查找包含特定文本的特定html行

如何使用Python查找包含特定文本的特定html行
EN

Stack Overflow用户
提问于 2018-08-02 03:05:31
回答 1查看 1.5K关注 0票数 0

我正在通过HTML查找存储在一行中的名称值对。我不知道如何在漂亮的soup find命令中指定要搜索的文本。

代码语言:javascript
复制
from bs4 import BeautifulSoup

html = '''\
<tr>
    <td>Project ID:</td>
    <td>
        <span>112120</span></td>
</tr>
'''

soup = BeautifulSoup(html)
for element in soup.find_all("td", text="Project ID:")
    print (element)
    print (element.next_sibiling)

当我运行这段代码时,我没有得到任何结果。

我意识到我可以返回所有"td“元素并在每个元素中搜索"Project ID:”,但这似乎需要做很多工作,因为我搜索的文档有大量的行和元素。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-02 04:34:35

与BeautifulSoup中的一切一样,您有很多选择。对于值对,我倾向于使用zip()函数:

代码语言:javascript
复制
from bs4 import BeautifulSoup

html = '''\
<tr>
    <td>Project ID:</td>
    <td>
        <span>112120</span></td>
</tr>
'''

soup = BeautifulSoup(html, 'lxml')

# option 1
td = soup.select('td')
for name, value in zip(td, td[1:]):
    print(name.text, value.text)

# option 2
td = soup.find(lambda t: t.text.strip()=='Project ID:').parent.select('td')
for name, value in zip(td, td[1:]):
    print(name.text, value.text)

# option 3
td1 = soup.find(lambda t: t.text.strip()=='Project ID:')
td2 = td1.find_next('td')
print(td1.text, td2.text)

每个选项都会打印:

代码语言:javascript
复制
Project ID: 
112120

选项1找到所有<td>并将它们压缩在一起,以获得所需的值对。

选项2查找带有文本‘项目ID:’的标签,查找父项(<tr>)并将<td>压缩在一起,如选项1所示。

选项3查找带有文本‘项目ID:’的标签,查找下一个<td>标签并打印这两个标签的文本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51640636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档