python - 使用 BeautifulSoup 根据其中包含的字符串提取 li 元素

标签 python beautifulsoup

我一直在尝试使用 BeautifulSoup 检索任何 <li>包含以下单词的任何格式的元素:Ottawa 。问题是ottawa永远不会在它自己的标签内,例如 <p> 。所以我只想打印 li包含 Ottawa 的元素.

HTML 格式如下:

<html>
<body>
<blockquote>
<ul><li><a href="http://link.com"><b>name</b></a>
(National: Ottawa, ON)
<blockquote> some description </blockquote></li>
<li><a href="http://link2.com"><b>name</b></a>
(National: Vancouver, BC)
<blockquote> some description </blockquote></li>
<li><a href="http://link3.com"><b>name</b></a>
(Local: Ottawa, ON)
<blockquote> some description </blockquote></li>
</ul>
</blockquote>
</body>
</html>

我的代码如下:

from bs4 import BeautifulSoup
import re
import urllib2,sys

url = "http://www.charityvillage.ca/cv/nonpr/nonpr1.html"
html = urllib2.urlopen(url).read()
soup = BeautifulSoup(html)

re1='.*?'
re2='(Ottawa)'
ottawa = soup.findAll(text=re.compile(re1+re2,re.IGNORECASE|re.DOTALL))
search = soup.findAll('li')

上面代码的结果正确找到了Ottawa,并且使用它来查找li时元素,它确实找到了 li元素,但它给了我页面上的每一个元素。

据我了解,它们目前并未像尝试做的那样结合起来 search = soup.findAll('li', text=re.compile(re1+re2,re.IGNORECASE|re.DOTALL))结果 []

我的最终目标基本上是获得每个 <li>包含任何提及 Ottawa 的元素并给我整个<li>包含名称、描述、链接等的元素

最佳答案

使用text属性过滤findAll的结果:

elems = [elem for elem in soup.findAll('li') if 'Ottawa' in str(elem.text)]

关于python - 使用 BeautifulSoup 根据其中包含的字符串提取 li 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10438748/

相关文章:

python - 如何使用 Python io 模块构建内存驻留数据结构?

python - 我的 .bash_profile 文件应该放在哪里供 Python 更新?

python - Python 的默认日志格式化程序是什么?

python - 用漂亮的汤提取数据时Python for Loop中的语法错误

Python 抓取维基百科表然后导出到 csv

Python urllib2.urlopen 返回 302 错误,即使页面存在

python - 为什么在 concurrent.futures.Future 实例中没有引发 TimeoutError

python - 网页抓取到 html 中的特定点然后停止

python - 无法从福布斯抓取当天的报价

python - 使用 Python 的维基百科爬虫