2016-04-20 3 views
1

У меня есть страница структурированной так:питона/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-ю ссылку каждого класса. Я пробовал использовать это:

Но он находит только первый якорь класса. Мне нужно как выход:

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

Любые идеи?

ответ

0

Вы должны использовать urls = element.findAll('a', href=True) (как вы использовали для поиска классов)

URLs будет содержать 3 элемента каждый раз.

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, который имеет класс «multiple_links», который получает g xpath.

Смежные вопросы