0

我想获取下载链接。例如在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

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

4

1 回答 1

1

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

for i in range (0,100)

如果您使用的是 Python 2(我认为您这样做了,因为 Python 3 的 urllib 没有urlopen),您应该使用 xrange(100) 代替,它会更快一些,如果您在计算,也不需要包含第一个零从零开始,所以 xrange(100) 就可以了。

此外,您还有语法错误,and 之间没有空格,range并在其后直接(0,100)添加 a 。:

最后,您的代码只会打印所有链接 100 次,这不是您需要的;如果您只需要前 100 个链接,则应使用以下内容:

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

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

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

于 2013-08-21T02:24:52.310 回答