2015-07-20 24 views
1

這是一個相當高層次的問題。 我開發了許多不同的網站刮板,在不同的網站工作。在開發網頁刮板模塊時作出pythonic決定

我有許多不同版本的函數名爲getName()和getAddress()。

在模塊的功能中做pythonic /不可怕的編碼實踐嗎?如果這樣做不好,有人可以給我一個關於如何管理這種類型的刮板庫的高級技巧嗎?

def universalNameAdressGrab(url): 
    page = pullPage(url) 
    if 'Tucson.com' in url: 
     import tucsonScraper 
     name = getName(page)  #this is the getName for Tucson 
     address = getAddress(page) 
    elif 'NewYork.com' in url: 
     import newyorkScraper 
     name = getName(page) #this is the getName for NewYork 
     address = getAddress(page) 
    return {'name':name, 'address':address} 
+0

你會碰到各種各樣的樂趣與設計中的導入緩存,我想。不要爲此而去。 – NightShadeQueen

+1

詳情:http://www.dabeaz.com/modulepackage/ – NightShadeQueen

+0

謝謝,我現在要觀看該教程。 – Rorschach

回答

1

在文件的頂部導入所有內容可能是更爲pythonic。之後,您可以通過模塊引用功能並刪除大量重複的代碼。您可能會遇到URL大小寫問題,所以我會將其標準化。你可以使用urlparse。我會考慮類似以下更pythonic:

import tucsonScraper 
import newyorkScraper 

def universalNameAdressGrab(url): 
    page = pullPage(url) 
    scraper = None 

    if 'Tucson.com' in url: 
     scraper = tucsonScraper 
    elif 'NewYork.com' in url: 
     scraper = newyorkScraper 
    else: 
     raise Exception("No scraper found for url") 

    return {'name': scraper.getName(page), 'address': scraper.getAddress(page)} 
+0

謝謝@natdempk。這絕對看起來更好,我現在計劃使用這種方式來做。我會等到一天結束之前接受這個答案,以防萬一有更好的人來。 – Rorschach