あなたはすべてが構成され得るために__init__
方法、サイトに接続し、それをダウンロードする_download
方法、結果を保存するために_store
方法とそれを結ぶためにrun
メソッドを持つクラスにコードを置くことができます一緒にこのように:
class Scraper(object):
def __init__(self, parser, page_generator):
self._parser = parser
self._pages = pages
def _download(self, page):
# do whatever you're already doing to download it
return html
def _store(self, data):
# Do whatever you're already doing to store the data
def run(self):
for page in pages:
html = self._download(page)
data = self._parser.parse(html)
self._store(data)
このクラスはparser.py
ファイルに存在します。
サイト固有のファイルのそれぞれに、2つのものを入れます。
class Parser(object):
def parse(html):
# All of your rules go here
def pages(some, args, if_, you, need, them): # but they should be the same for all files
return a_list_of_pages_or_generator
その後、あなたは次の関数を使用してpython.py
ファイルに設定することができます
def get_scraper(name):
mod = __import__(name)
parser = mod.Parser()
pages = mod.pages() # Pass whatever args you need to figure out the urls
return Scraper(parser, pages)
をあなたはその後、
scraper = get_scraper('google')
scraper.run()
のようにそれを使用することができ、このようにそれを行う必要がないという利点を持っていますScraper
クラスを変更する必要があります。あなたのスクレーパーと話をするためのサーバーを得るために別のトリックを行う必要がある場合、各モジュールにDownloader
クラスを作成し、Parser
クラスのように使用することができます。同じことをするパーサーが2つ以上ある場合は、別々のモジュールの汎用パーサーとして定義し、必要な各サイトのモジュールにインポートします。または、サブクラス化して調整を行います。どのようにサイトをダウンロードして解析しているかわからなければ、より具体的にするのは難しいです。
私の感覚は、すべての細部を細かくするためにいくつかの質問をしなければならないかもしれないということですが、それは良い学習体験になります。
最終的に、私は[Juriscraper](https://bitbucket.org/mlissner/juriscraper/)ライブラリを構築するために、ここへの両方の答えを使用しましたが、これをもっと重く借用しました。本当に役立つもの、ありがとう! – mlissner