2013-09-11 2 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

콘텐츠의 첫 번째 페이지 만 다운로드하기 때문에. 이 페이지의 수를 알고 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 

가 내 컴퓨터에서 실행할 수 있습니다,

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" 

과 60를 얻을 :

그냥 모든 페이지를 donwload하기 위해 루프를 사용 세 페이지의 링크.
행운을 빕니다 ~

+0

3 페이지라면 전체 페이지를 모른다면 어떻게됩니까? –

+0

while 루프와 break util을 작성하여 결과가 나오지 않도록 할 수 있습니다. 예를 들면 : 내 대답. – atupal

+0

감사합니다. 그것은 작동합니다!. % d 안에서 d를 쓰는 것을 잊어 버렸고 while 루프가 작동하지 않는 이유가 여기에 있습니다. –

관련 문제