2013-08-21 42 views
0

我想获取下载链接。例如,在http://www.brothersoft.com/windows/top-downloads/如何在使用beautifulsoup的python中获得下载链接?

所以预期的结果应该是:

List of url: 
1. http://www.brothersoft.com/photoscape-64604.html 
2. http://www.brothersoft.com/orbit-downloader-54366.html 
3. .... 
4. ... 
till 100. 

我曾尝试这样的代码:

import urllib 
from bs4 import BeautifulSoup 

pageFile = urllib.urlopen("http://www.brothersoft.com/windows/top-downloads/") 

pageHtml = pageFile.read() 

pageFile.close() 

soup = BeautifulSoup("".join(pageHtml)) 

sAll = soup.findAll("a") 

for i in range (0,100) 
    for link in sAll: 
     print i,link 

但它给出不正确的输出。 谢谢

回答

1

首先,BeautifulSoup("".join(pageHtml))是不需要的,因为pageHtml已经是一个字符串,所以你可以直接使用,如BeautifulSoup(pageHtml)

for i in range (0,100)

如果你正在使用Python 2(我认为你这样做,因为Python 3的urllib的没有urlopen),你应该使用的xrange(100)来代替,这是一个快一点,也是不需要的话要包括第一个零,如果你从零开始计算,所以xrange(100)将会很好。

此外,您有一个语法错误,在range(0,100)之间没有空格,并在它后面直接添加一个:

最后,你的代码只会打印所有链接100次,这不是你所需要的;如果你只需要第100个链接,你应该使用这样的事情:

for i in xrange(100): print sAll[i]["href"]

基本上,这使得从0到100的列表,并对其进行迭代,当前值是i,则它使用i作为从sAll数组中检索数据的索引(显然,如果sAll列表小于100,将抛出一个KeyError异常),最后打印该项目的链接目标的“href”属性。

如果您想要打印该号码,则可以使用print i, sAll[i]["href"]

+0

我得到这个错误:文件 “C:\ Documents和Settings \法鲁斯\桌面\ soup.py”,第13行,在 打印I,SALL [I] [ “HREF”] 文件“C:\编码 返回codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError:'charmap'编解码器无法编码字符u'\ u2013'在位置 115:“Python27 \ lib \ encodings \ cp437.py”字符映射到

+0

那么'print i,sAll [i] [“href”]。encode('utf-8')'? – 2013-08-21 02:50:17

+0

文件“C:\ Documents and Settings \ Fairuz \ Desktop \ soup.py”,第13行,在 print i,sAll [i] [“href”] 文件“C:\ Python27 \ lib \ encodings \ cp437编码 返回codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError:'charmap'编解码器无法编码字符u'\ u2013'在位置 115:字符映射到

相关问题