2016-04-20 10 views
1

Ich habe eine Seite wie diese strukturiert:Python/beautifulsoup - mehrere Anker innerhalb der Klasse finden

<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> 

Ich will den dritten Link jeder Klasse extrahieren. Ich habe versucht, dies zu verwenden:

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 

Aber es findet nur der erste Anker der Klasse. Ich brauche als Ausgabe:

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

Irgendwelche Ideen?

Antwort

0

sollten Sie verwenden urls = element.findAll('a', href=True) (wie Sie für die Klassen finden verwendet)

Urls wird dann jedes Mal enthält 3 Elemente.

0

Ich habe mich verändert Input:

<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> 

Try this:

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]] 

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

Hier root_tag ist Liste von div, das die Klasse 'multiple_links' hat, die usin bekommt g XPath.

Verwandte Themen