使用BeautifulSoup调用特定的“div”元素

时间:2017-01-21 12:06:27

标签: python python-2.7

我希望从以下HTML代码中提取第二个链接(即数字'2'的链接):

<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 个答案:

答案 0 :(得分: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>]

答案 1 :(得分:1)

试试这个:

您可以将RegEx与BeautifulSoup一起使用

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

print page2Link