做出关于开发网络抓取模块的 pythonic 决定
Making a pythonic decision on developing a web scraper module
这是一个相当高级的问题。
我开发了许多在不同网站上工作的不同网络抓取工具。
我有许多不同版本的名为 getName() 和 getAddress() 的函数。
在模块的功能中这样做是pythonic/not糟糕的编码习惯吗?如果这样做不好,有人可以给我一个关于如何管理这种 library-of-scrapers 的高级提示吗?
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}
在文件顶部导入所有内容可能更像 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)}
这是一个相当高级的问题。 我开发了许多在不同网站上工作的不同网络抓取工具。
我有许多不同版本的名为 getName() 和 getAddress() 的函数。
在模块的功能中这样做是pythonic/not糟糕的编码习惯吗?如果这样做不好,有人可以给我一个关于如何管理这种 library-of-scrapers 的高级提示吗?
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}
在文件顶部导入所有内容可能更像 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)}