用漂亮的汤抓住父id标签?

时间:2014-05-22 13:14:36

标签: python beautifulsoup

我抓住网站上的一堆链接并将它们打印到列表中但是为了使列表更具可读性,我需要抓住链接父标记,但我无法弄清楚如何做到这一点。

这个页面我看起来像这样

<div id=bunch_of_links_1>
<a href=link 1>
<a href=link 2>
<a href=link etc> 
</div>
<div id=another_bunch_of_links_1>
<a href=another_link 1>
<a href=another_link 2>
<a href=another_link etc> 
</div>

所有链接都以javascript开头,所以我用这个来抓取链接

links = soup.findAll(href=re.compile("javascript"))

然后使用for循环打印它们。我应该如何获取每个链接的div id并将其与链接一起打印

编辑 - 我不知道在链接中为l插入[(l,l.parent.get('id'))

继承人是我的代码

links = soup.findAll(href=re.compile("javascript"))

for link in links:
full_link = link.get('href')
names = link.contents[0]
print "+names+", "+full_link+"

我希望能够与其他人一起打印Id标签

编辑2

我把它放进了我的for循环

 idtag = link.parent.get('id')

并且当我打印idtag var并返回无

时,它不会给我任何错误

1 个答案:

答案 0 :(得分:1)

BeautifulSoup中的每个元素都有一个指向父元素的.parent属性。在这里使用:

[(l, l.parent.get('id')) for l in links]

演示:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('''\
... <div id=bunch_of_links_1>
... <a href=link 1>
... <a href=link 2>
... <a href=link etc> 
... </div>
... <div id=another_bunch_of_links_1>
... <a href=another_link 1>
... <a href=another_link 2>
... <a href=another_link etc> 
... </div>
... ''')
>>> 
>>> links = soup.find_all('a')
>>> [(l, l.parent.get('id')) for l in links]
[(<a href="link">
</a>, 'bunch_of_links_1'), (<a href="link">
</a>, 'bunch_of_links_1'), (<a etc="" href="link">
</a>, 'bunch_of_links_1'), (<a href="another_link">
</a>, 'another_bunch_of_links_1'), (<a href="another_link">
</a>, 'another_bunch_of_links_1'), (<a etc="" href="another_link">
</a>, 'another_bunch_of_links_1')]