如何使用beautifulsoup在python中获取下载链接?

时间:2013-08-21 02:09:49

标签: python-2.7

我想获得下载链接。例如,在http://www.brothersoft.com/windows/top-downloads/

所以预期的结果应该是:

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 个答案:

答案 0 :(得分:1)

首先,由于pageHtml已经是一个字符串,因此不需要BeautifulSoup("".join(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作为索引从{{1}检索数据数组(显然,如果sAll列表小于100,这将抛出KeyError异常),最后它会打印该项的“href”属性,即链接目标。

如果您还要打印该号码,可以改用sAll