【问题标题】:Python 3 BeautifulSoup4 search for text in source pagePython 3 BeautifulSoup4 在源页面中搜索文本
【发布时间】:2015-05-09 03:49:42
【问题描述】:

我想在源代码中搜索所有“1”并打印该“1”的位置例如:<div id="yeahboy">1</div>“1”可以替换为任何其他字符串。我想看看那个字符串周围的标签。

【问题讨论】:

  • 你说的那个'1'的位置是什么意思
  • @har07我只想打印源代码中所有'1'的所有位置1可以用任何其他字符串替换
  • 定义“位置”。您的意思是,您想打印容器元素,例如:<div id="yeahboy">1</div>
  • 请给我们一个上下文。发布最少的代码,显示输入 HTML 的样子,你用来保存BeautifulSoup 对象的变量等,然后我们可以在此基础上构建,只关注查找文本“1”并打印元素的核心问题
  • @har07 我很难向你解释它,但可以说有一个网页 -wikipedia- 我想搜索“香蕉”这个词并打印它在哪里或不同的位置它基本上是一个 ctrl+f (有点)我想像我的例子一样看到那个字符串周围的标签

标签: python-3.x beautifulsoup


【解决方案1】:

考虑这个 context 例如 * :

from bs4 import BeautifulSoup

html = """<root>
<div id="yeahboy">1</div>
<div id="yeahboy">2</div>
<div id="yeahboy">3</div>
<div>
    <span class="nested">1</span>
</div>
</root>"""
soup = BeautifulSoup(html)

您可以使用find_all() 传递parameter True 表示您只需要元素节点(而不是子文本节点),并使用parameter text="1" 表示您想要的元素必须具有文本内容等于“1” -或您要搜索的任何其他文本 - :

for element1 in soup.find_all(True, text="1"):
    print(element1)

输出:

<div id="yeahboy">1</div>
<span class="nested">1</span>

*) 对于OP:对于未来的问题,尝试给出一个上下文,就像上面的上下文示例一样。这将使您的问题更加具体并且更容易回答 - 因为人们不必自己创建上下文,这可能与您实际遇到的情况无关.

【讨论】:

  • 问题是我不知道它们的位置,我想用脚本找到它们
  • @bob 上面的代码演示了在不知道元素位置的情况下通过文本查找元素。这个例子有什么问题吗?
  • 它确实有效,但有一个但是。如果文本包含所有字符串,它会起作用。如果我想查看字符串的一部分,它不起作用,例如:(这项工作)import requests from bs4 import BeautifulSoup url = 'http://www.editionsmosquito.com/exposition.php' r= requests.get(url) soup = BeautifulSoup(r.content) for element1 in soup.find_all(True, text="Expositions"): print(element1) 确实是这项工作,但是当我这样做时:for element1 in soup.find_all(True, text="Expo"): print(element1) 即使博览会包含博览会,它也不会打印它,你能帮帮我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多