我正在使用 python 和 beautifulsoup。 我有一个 html 页面,如下所示:

<i>Hello<\i>
<a href="www.google.com"> Google <\a>
<i>Bye<\i>
<a href="www.google.com"> Google2 <\a>
<i>Hello<\i>
<a href="www.google.com"> Google3 <\a>
<i>Bye<\i>

我想在 Hello 和 Bye 标签之间而不是在 Bye 和 Hello 标签之间获取所有“a”标签文本(我知道该怎么做,我只是不知道如何找到它们)。 用漂亮的汤和蟒蛇可以吗?

#1楼 票数:2 已采纳

我稍微更正了您的 HTML。 (请注意,反斜杠应该是斜杠。)

为此,首先找到“Hello”字符串。 调用这些字符串一个s的for循环。 那么你想要的是s.findParent().findNextSibling()

我显示ss.findParent()s.findParent().findNextSibling()以向您展示我如何从这些字符串构建您需要的内容。

>>> import bs4
>>> HTML = '''\
... <i>Hello</i>
... <a href="www.google.com"> Google </a>
... <i>Bye</i>
... <a href="www.google.com"> Google2 </a>
... <i>Hello</i>
... <a href="www.google.com"> Google3 </a>
... <i>Bye</i>
... '''
>>> soup = bs4.BeautifulSoup(HTML, 'lxml')
>>> for s in soup.find_all(string='Hello'):
...     s, s.findParent(), s.findParent().findNextSibling()
...     
('Hello', <i>Hello</i>, <a href="www.google.com"> Google </a>)
('Hello', <i>Hello</i>, <a href="www.google.com"> Google3 </a>)

#2楼 票数:1

您可以混合使用 BeautifulSoup 和正则表达式。 这里正则表达式用于抓取限制标签之间的所有内容,然后使用 BeautifulSoup 提取锚标签。

from bs4 import BeautifulSoup
import re

excerpts = re.findall(r'<i>Hello<\\i>(.*?)<i>Bye<\\i>', html, re.DOTALL)

for e in excerpts:
    soup = BeautifulSoup(e)
    for link in soup.findAll('a'):
        print(link)

输出:

<a href="www.google.com"> Google </a>
<a href="www.google.com"> Google3 </a>

#3楼 票数:0

也许您可以使用re模块。 参考见正则表达式 Howto for py2

str_tags = """
<i>Hello<\i>
<a href="www.google.com"> Google <\a>
<i>Bye<\i>
<a href="www.google.com"> Google2 <\a>
<i>Hello<\i>
<a href="www.google.com"> Google3 <\a>
<i>Bye<\i>
"""

import re
str_re = re.compile(r".*Hello.*\s<a[^>]*>([\w\s]+)<\a>\s<i>Bye")
content_lst = str_re.findall(str_tags)
if content_lst:
    print(content_lst)
else:
    print("Not found")

输出

['谷歌','谷歌3']

请注意,此方法在很大程度上取决于您的 html 的外观。 关于上述代码的解释,也请参考第一个链接。

  ask by BDCBin translate from so

未解决问题?本站智能推荐:

1回复

BeautifulSoup-获取两个标签之间的字符串

我想使用BeautifulSoup捕获两个HTML标记之间的所有内容。 这是我关注的HTML代码段: <br>NEFS VII &amp; VIII Manager<br> 因此,即使我对HTML不太了解,我仍然可以看到需要捕获<br>
4回复

python beautifulsoup 在标签之间查找

我正在尝试从网站获取数据。 我设法获得了我想要的数据的子集 这给了我这个: 我想要的是这个: 如果 strong 等于我拥有的字典,我可以在强标签之间获得所有 p 标签吗? 或者我应该如何解决?
3回复

python-beautifulsoup-在标签之间查找可变数量的文本

我正在使用python + beautifulsoup解析html。 我的问题是我有可变数量的文本项。 例如,在这种情况下,我要提取“文本1”,“文本2”,...“文本4”。 在其他网页中,可能只有“文本1”,也可能只有两个,以此类推。 如果标签中包含“文本x”,这将使我的生活更轻松。
2回复

在两个不同的 html 标签之间获取文本 python beautifulsoup

我想知道是否有可能通过 python 中的 beautifulsoup 包在两个完全不同的文本之间获取标签。 我已经试过了: 我希望能够分别获取 dtposted、trnamt、fitid 和 name 之间的文本。 当我寻找下一个兄弟时,它返回 None,如果我寻找一个特定的标签,它不会给我两
4回复

使用 BeautifulSoup 抓取两个标签之间的所有 HTML

我有一些看起来像这样的 HTML: 我想将所有 HTML 从第一个 h1 复制到下一个 h1。 我该怎么做?
3回复

在BeautifulSoup4中的两个标签之间获取段落

我是编程,Python和BS4的新手,我希望通过Web爬网程序项目变得更好。 我有一堆类似的页面,其中包含我想分开的信息。 这是我需要使用的模板: “导演”和“作者”信息的确很容易收集,但我也想提供摘要和演员表段落。 问题在于,该提要在网站上并不总是三段长(有时更少,有时更多),因
1回复

在Python中使用BeautifulSoup提取两个标头标签之间的文本

我正在尝试使用BeautifulSoup在Wikipedia页面上使用Python提取电影的情节。 我是Python和BeautifulSoup的新手,所以我不确定如何实际使用它。 这是输入代码。 所以我只想提取两个h2之间的文本,这就是情节。 我应该如何使用Beautiful
2回复

使用 BeautifulSoup 在两个标签之间抓取完全可变的内容? [复制]

这个问题在这里已经有了答案: 使用 BeautifulSoup 抓取两个标签之间的所有 HTML (4 个回答) 11 个月前关闭。