1

私は、さまざまな形式のサイトから同様のデータ (タイトルと日付) を取得するユーティリティを構築していますが、BeautifulSoup は非常に役に立ちました。サイトごとに新しい関数を作成する必要がないように、使用している BeautifulSoup 関数を保存する良い方法がわかりません。次に例を示します。

soup = BeautifulSoup(html)
title = soup.find("h4", "title").text    # extract title
date = soup.find('li', 'when').em.text       # extract date

各サイトには、解析するノードの異なるセットがあります。何百ものサイトがあるので、それぞれに独自の機能を構築するのはばかげています。soup.find('x').etc.etc 呼び出しを URL と一緒にテーブルに格納し、1 つの関数内で正しい BeautifulSoup 呼び出しを適用する方法はありますか? これが理にかなっていることを願っています。

ありがとう!

4

1 に答える 1

0

うーん、私があなたの投稿を理解していると仮定すると、これでうまくいきますか?

linkInstructions = {
  "url1": {
    "title": lambda n: n.find('h4', 'title').text,
    "date": lambda n: n.find('li', 'when').em.text
  },
  "url2": {
    "title": lambda n: n.find('h3', 'title').text,
    "date": lambda n: n.find('li', 'when').strong.text
  }
  # and so forth
} 

def parseNode(node, url):
  # let 'node' be the result of BeautifulSoup(html)
  # and 'url' be the url of the site    

  result = {}

  for key,func in linkInstructions[url].iteritems():
    result[key] = func(node)

  # would return a dict with the structure {'title': <title>, 'date': <date>}
  return result

編集:おっと、列挙は使用する適切な機能ではありません。

于 2013-03-05T07:32:52.067 に答える