python - 查找与 Beautiful Soup 的特定链接

标签 python beautifulsoup

我正在使用 Beautiful Soup for Python 来解析网页,以便从某些文件下载数据并将它们聚合到一个文件中。我正在解析的网页包含大量不同的下载链接,但我无法获取我想要的特定链接。

HTML 基本上是这样设置的:

<li> <b>data I dont care about: </b>
<a href ="/id#____dontcare2010">2010</a> <a href = "/id#____dontcare2011">2011</a> (and so on)
</li>

<li> <b>data I DO care about: </b>
< a href ="/id#___data2010">2010</a> <a href= "/id#____data2011">2011</a> ....
</li>

(id#____ 只是该网页包含信息的特定对象的 ID 号,对于问题来说不太重要,但我认为我会尽可能准确)

我想要的是 BeautifulSoup 找到包含字符串“我关心的链接:”的列表(“<li> ”标签),然后将该列表中的每个链接存储到 Python 列表中。我试过了,

soup.findAll('li', text = 'Links I DO care about: ")

但这似乎不起作用......

我想有一些方法可以用 Beautiful Soup 来完成这些步骤: 1.找到我想要的具体列表 2.找到所有<a href="..."></a>该列表中的标签 3. 将所有这些链接存储在 Python 列表中。

不过我似乎找不到办法做到这一点。

有什么建议吗?

最佳答案

text 参数(现在称为 string )不会在元素的子元素文本内搜索(为什么? - 请参阅此 documentation paragraph 中的最后一个注释,对于每个呈现的 .string 元素, None 实际上将是 li )。我要做的是通过文本找到 b 元素,然后获取所有 a siblings :

b = soup.find("b", text=lambda text: text and "data I DO care about:" in text)
links = [a["href"] for a in b.find_next_siblings("a", href=True)]
print(links)

或者,您可以从 bli go up the tree,然后使用 find_all() 查找 li 内的所有链接:

b = soup.find("b", text=lambda text: text and "data I DO care about:" in text)
li = b.find_parent("li")
links = [a["href"] for a in li.find_all("a", href=True)]
print(links)

当然,还有其他方法可以找到所需的 a 元素。

关于python - 查找与 Beautiful Soup 的特定链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37685718/

相关文章:

python - 如何在Windows上安装Python优化包pyOpt

python - 如何在 python PubSub 订阅者中捕获内部/库线程中发生的异常?

python - 如何抓取两个 URL 并将每个 URL 的元素放入一个表中?

python - beautifulsoup 提取句子,如果它包含关键字

python - 如果我知道该元素或类的 ID,如何在某些 HTML 元素中使用 Beautiful Soup 设置值?

python - BeautifulSoup 查找中的正则表达式使用

python - XML递归搜索并获取属性中特定键的值

python - 如何使用密码保护 Google App Engine 应用程序?

python - 删除连续的字母重复项

python - 如何抓取与特定期刊/文章论文的每位教授相关的从属关系