我对使用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")
还是那样的?我查看了文档,但不知何故找不到它。有人可以帮忙吗?
答案 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()