提取特定<div>:BeautifulSoup </div>的无序列表

时间:2013-06-04 10:47:09

标签: python html beautifulsoup

我正在抓取我的Android应用程序所需的webpage。我想要做的是从href属性中提取国家/地区。这与此one相同。

这是我的代码:

from bs4 import BeautifulSoup
import urllib2
import re

html_page = urllib2.urlopen("http://www.howtocallabroad.com/a.html")
soup = BeautifulSoup(html_page)
li = soup.select("ul > li > a")
for link in li:
    print link.get('href')

我遇到的问题是,结果会返回包含其他a的所有div标记

afghanistan/
albania/
algeria/
american-samoa/
andorra/
angola/
anguilla/
antigua/
argentina/
armenia/
aruba/
ascension/
australia/
austria/
azerbaijan/
codes.html  # not needed
nanp.html   # not needed
qa/         # not needed
forums/     # not needed

我想知道完成此任务需要什么功能。我想仅在href中过滤<div id="content">docs没有太多信息。

对不起,这是我第一次写python。

3 个答案:

答案 0 :(得分:3)

使用findAll()

>>> for i in soup.find('div',{'id':'content'}).findAll('a'):
...     print i['href']
... 
afghanistan/
albania/
algeria/
american-samoa/
andorra/
angola/
anguilla/
antigua/
argentina/
armenia/
aruba/
ascension/
australia/
austria/
azerbaijan/

soup.find('div',{'id':'content'})说的话。它会找到id content<div id="content">匹配的div标签。

.findAll() ...找到所有! 'a'用作查找所有标记的参数。它返回每个标签的列表。

然后我只需打印每个标签的href

答案 1 :(得分:2)

尝试

li = soup.select("#content ul > li > a")

而不是

li = soup.select("ul > li > a")

答案 2 :(得分:0)

这样做:

li = soup.select("#content ul > li > a")

例如:

li = soup.select("#[call india][1] ul > li > a")