2017-01-21 4 views
1

Я хочу, чтобы извлечь вторую ссылку (то есть ссылка на число «2») из следующего HTML-кода:Вызов конкретного элемента «DIV» с помощью BeautifulSoup

<div class="post-footers"> 
    1 |<a href="index.html?page=2"> 2 </a> 
    |<a href="index.html?page=3"> 3 </a> 
    |<a href="index.html?page=4"> 4 </a> 
</div> 

Так я думал, чтобы вывести все href в список, а затем извлечь элемент с индексом 1, как показано ниже:

tags = soup.find("div", class_="post-footer") 
links = tags.get('href') 
print links[1] 

Но он возвращает ошибку:

newtags.get('href', None) 
AttributeError: 'NoneType' object has no attribute 'get' 

Это означает, что теги оказались пустыми. Так где же в коде я ошибаюсь?

Спасибо, если кто-нибудь сможет помочь :)

ответ

2

Попробуйте это,

Покушение 1

In [1]: tags = soup.find("div", class_ = "post-footers") 
In [2]: links = [i.attrs['href'] for i in tags.findAll('a')] 
In [3]: print links 

Результат 1

['index.html?page=2', 'index.html?page=3', 'index.html?page=4'] 

Былошибка орфографии в вашем коде. Вы использовали post-footer вместо post-footers.

Покушение 2

Если вы используете href, как True вы получите все a, как это,

In [28]: tags = soup.find("div", class_ = "post-footers") 
In [31]: links = tags.find_all('a',href=True) 

Результат 2

[<a href="index.html?page=2"> 2 </a>, 
<a href="index.html?page=3"> 3 </a>, 
<a href="index.html?page=4"> 4 </a>] 
+0

Ооо, что кажется хорошим. Я немного новичок в python. Итак, не возражайте, чтобы я спросил - это регулярное выражение, не так ли? часть «i.attrs ...» Я этого не понимал. –

+0

Также еще один вопрос: в попытке 1, i проходит все теги a внутри элемента div. И 'i.attrs' извлекает часть href из тегов 'a' и выводит их как другой список? Спасибо, кстати. –

+0

@RahulRamesh Я использовал 'list comprehension' там, нашел все' a' и выберет '' href' часть. –

1

Попробуйте это:

Вы можете использовать регулярные выражения с BeautifulSoup

import re 
page2Link = soup.find_all(href = re.compile("(page=2)")) 

print page2Link 
+0

@ piyush-s-wanare re.compile находит теги с соответствующим текстом справа? Если это так, то почему между «page = 2» была скобка? –

+0

В скобках упоминается, что он содержит регулярное выражение. –

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