0

我正在抓取我的 android 应用程序所需的这个网页。我想做的是从href属性中提取国家。这和这个是一样的。

这是我的代码:

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标签,包括来自其他divs

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

我想知道完成这个需要什么功能。我只想过滤hrefs <div id="content">文档没有太多信息。

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

4

3 回答 3

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'})做它所说的。它找到具有idof content(<div id="content">将被匹配) 的 div 标签。

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

然后我只需打印每个 a-tag 的href.

于 2013-06-04T11:40:48.370 回答
2

尝试

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

代替

li = soup.select("ul > li > a")
于 2013-06-04T11:06:57.350 回答
0

这样做:

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

例如:

li = soup.select("#[call india][1] ul > li > a")
于 2015-03-02T13:05:38.953 回答