2013-08-21 37 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:字符映射到

相關問題