寻找与美丽的汤

时间:2016-06-07 17:31:52

标签: 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: ")

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

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

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

a

或者,您可以go up the treeb = 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) b,然后使用li查找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) 元素。