2014-11-17 31 views
0

我目前正在編寫一個python爬蟲,我想切換到下一頁,但是最佳實踐是什麼?爬行器:轉到下一頁,最佳實踐

其實很簡單,網址的末尾是.html?page = 1,所以我可以增加頁碼,但有沒有最好的實踐來做這件事情儘可能乾淨?

我用的urllib,URL解析和beautifulSoup

#!/usr/bin/env python2 
import urllib 
import urlparse 
from bs4 import BeautifulSoup 


def getURL(): 
    try: 
     fo = open("WebsiteToCrawl", "rw") 
     print ok() + "Data to crawl a store in : ", fo.name 
    except: 
     print fail() + "File doesn't exist, please create WebSiteTOCrawl file for store website  listing" 
    line = fo.readlines() 
    print ok() + "Return website : %s" % (line) 
    fo.close() 
    i= 0 
    while i<len(line): 
     try: 
      returnDATA = urllib.urlopen(line[i]).read() 
      print ok() + "Handle :" + line[i]    
      handleDATA(returnDATA) 
     except: 
      print fail() + "Can't open url" 
     i += 1 

def handleDATA(returnDATA): 
try: 
     soup = BeautifulSoup(returnDATA) 
     for link in soup.find_all('a'): 
      urls = link.get('href') 
     try: 
      print urls 
     except: 
      print end() + "EOF: All site crawled" 

def main(): 
    useDATA = getURL() 
    handleDATA(useDATA) 

if __name__ == "__main__": 
    main() 

NB:我simpfly的代碼比原來

+0

你寫的是什麼?顯示 – Hackaholic

+0

是一個特定的網站爬蟲?或者你應該爬行任何網站?如果有任何網站 - 沒有正確的答案,它們都非常不同,有些網站甚至沒有「下一頁」概念。 – Rusty

+0

@Rusty,我的抓取工具有一個列表(約20個網站),你說得對,他們都非常不同,但我嘗試從通用函數開始,並在特定功能後 – xif

回答

0

如果它在URL變化的數量那麼簡單,那麼這樣做。

但是,您應該考慮如何知道何時停止。如果頁面返回底部的分頁詳細信息(例如,返回1 2 3 4 5 ... 18下一步),那麼您可以獲取該元素的內容並找到18.

替代方法雖然較慢,但可以解析每個頁面上的分頁鏈接,並通過直接打開url手動跟蹤它們,或者使用單擊方法單擊next,直到下一個頁面不再出現。我不直接使用urllib,但可以使用Selenium的python綁定(如果你需要它是無頭的話,由PhantomJS驅動)輕鬆完成。如果你沒有AJAX處理,你也可以使用RoboBrowser完成整個例程,可能只需要更少的代碼。