2013-09-11 106 views
0

我有這樣的代碼:如何獲取所有軟件鏈接?

import urllib 
import urlparse 
from bs4 import BeautifulSoup 

url = "http://www.downloadcrew.com/?act=search&cat=51" 
pageHtml = urllib.urlopen(url) 
soup = BeautifulSoup(pageHtml) 

for a in soup.select("div.productListingTitle a[href]"): 
    try: 
     print (a["href"]).encode("utf-8","replace") 
    except: 
     print "no link" 

     pass 

但是當我運行它,我只得到只有20個鏈接。輸出應該超過20個鏈接。

+0

爲什麼會超過20個鏈接?每頁只有20個鏈接。 – Blorgbeard

+0

@Blorgbeard因爲底部還是有很多頁面。 –

+0

您只下載了第一頁。你必須循環所有這些。 – Blorgbeard

回答

1

因爲您只下載內容的第一頁。

只需使用一個循環來donwload所有頁面:

import urllib 
import urlparse 
from bs4 import BeautifulSoup 

for i in xrange(3): 
    url = "http://www.downloadcrew.com/?act=search&page=%d&cat=51" % i 
    pageHtml = urllib.urlopen(url) 
    soup = BeautifulSoup(pageHtml) 

    for a in soup.select("div.productListingTitle a[href]"): 
     try: 
      print (a["href"]).encode("utf-8","replace") 
     except: 
      print "no link" 

如果你do'nt知道頁面的數量,你可以

import urllib 
import urlparse 
from bs4 import BeautifulSoup 

i = 0 
while 1: 
    url = "http://www.downloadcrew.com/?act=search&page=%d&cat=51" % i 
    pageHtml = urllib.urlopen(url) 
    soup = BeautifulSoup(pageHtml) 

    has_more = 0 
    for a in soup.select("div.productListingTitle a[href]"): 
     has_more = 1 
     try: 
      print (a["href"]).encode("utf-8","replace") 
     except: 
      print "no link" 
    if has_more: 
     i += 1 
    else: 
     break 

我在我的電腦上運行它,它得到60三頁鏈接。
祝你好運〜

+0

,如果3頁..有關如果不知道總頁面? –

+0

你可以編寫一個while循環,並打破util不能得到的結果。例如:在我的答案中。 – atupal

+0

謝謝你的男人。有用!。我在%d裏面忘了沒有寫d,這就是爲什麼while循環不工作的原因。 –

相關問題