python / beautifulsoup - 在类中找到多个锚点

时间:2016-04-20 10:06:44

标签: python html beautifulsoup

我的页面结构如下:

<div class="multiple_links">
<a href="http://www.example.org/link1"> link1 </a>
<a href="http://www.example.org/link2"> link2 </a>
<a href="http://www.example.org/link3"> link3 </a>
</div>

<div class="multiple_links">
<a href="http://www.example.org/link4"> link4 </a>
<a href="http://www.example.org/link5"> link5 </a>
<a href="http://www.example.org/link6"> link6 </a>
</div>

我想提取每个班级的第3个链接。我试过用这个:

urls = soup.findAll('div', {'class':'multiple_links'})
for element in urls:
    url = element.find('a', href=True)
    print url['href']
>> http://www.example.org/link1
>> http://www.example.org/link4

但它只发现了该类的第一个锚点。我需要输出:

>> http://www.example.org/link3
>> http://www.example.org/link6

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你应该使用urls = element.findAll('a', href=True) (就像你用来查找课程一样)

每次都会包含3个元素。

答案 1 :(得分:0)

  

我更改了输入:

<div class="multiple_links">
<a href="http://www.example.org/link1"> link1 </a>
<a href="http://www.example.org/link2"> link2 </a>
<a href="http://www.example.org/link3"> link3 </a>
</div>
<div class="multiple_links">
<a href="http://www.example.org/link4"> link4 </a>
<a href="http://www.example.org/link5"> link5 </a>
<a href="http://www.example.org/link6"> link6 </a>
</div>
<div class="multiple_links">
<a href="http://www.example.org/link4"> link7 </a>
<a href="http://www.example.org/link5"> link5 </a>
</div>

试试这个:

import lxml.html as PARSER
root_tag = PARSER.fromstring(s).xpath("//div[ @class='multiple_links']")
[[j.values()[0] for i,j in enumerate(r) if i==2][0] for r in root_tag if [j.values()[0] for i,j in enumerate(r) if i==2]]

输出: ['http://www.example.org/link3','http://www.example.org/link6']

这里root_tag是div的列表,它使用xpath获得类'multiple_links'。