使用BeautifulSoup访问下一个兄弟<li>元素

时间:2016-02-01 22:02:52

标签: python html beautifulsoup

我对使用Python / BeautifulSoup进行Web解析完全不熟悉。我有一个HTML,其代码(部分)如下:

<div id="pages">
    <ul>
        <li class="active"><a href="example.com">Example</a></li>
        <li><a href="example.com">Example</a></li>
        <li><a href="example1.com">Example 1</a></li>
        <li><a href="example2.com">Example 2</a></li>
    </ul>
</div>

我必须访问每个链接(基本上每个<li>元素),直到不再存在<li>个标记。每次点击一个链接时,其对应的<li>元素都会被归类为“活跃”。我的代码是:

from bs4 import BeautifulSoup
import urllib2
import re

landingPage = urllib2.urlopen('somepage.com').read()
soup = BeautifulSoup(landingPage)

pageList = soup.find("div", {"id": "pages"})

page = pageList.find("li", {"class": "active"})

此代码为我提供了列表中的第一个<li>项。我的逻辑是我继续检查next_sibling是否不是无。如果它不是None,我正在创建对该兄弟href<a>标记的<li>属性的HTTP请求。那会让我到下一页,依此类推,直到没有更多的页面。

但我无法弄清楚如何获得上面给出的next_sibling变量的page。是page.next_sibling.get("href")还是那样的?我查看了文档,但不知何故找不到它。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:11)

使用find_next_sibling()并明确说明您要查找的兄弟元素:

next_li_element = page.find_next_sibling("li")
如果next_li_element与最后一个有效None对应,

page将成为li

if next_li_element is None:
    # no more pages to go

答案 1 :(得分:2)

您是否查看了dir(page)或文档?如果是这样,您是如何错过.find_next_sibling()的?

from bs4 import BeautifulSoup
import urllib2
import re

landingPage = urllib2.urlopen('somepage.com').read()
soup = BeautifulSoup(landingPage)

pageList = soup.find("div", {"id": "pages"})

page = pageList.find("li", {"class": "active"})
sibling = page.find_next_sibling()
相关问题