做出关于开发网络抓取模块的 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)}