我的页面结构如下:
<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
有什么想法吗?
答案 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'。