1

getattr() が単純な 1 つのメソッド/関数呼び出しに使用されているという回答が表示されます。

任意の文字列についてはどうですか。たとえば、ここで Web 解析を実行します。

from bs4 import BeautifulSoup
import urllib

f = urllib.urlopen(link) # link comes from database, e.g. 'http://www.example.com'
soup = BeautifulSoup(f)

text = soup.find(True, 'text').get_text() # Now this is hardcoded

正常に動作しますが、データベースから取得したパーサー文字列を実行するのはどうですか? 文字列は次のようになります。

soup.find("div", "layout left").find(id=True).get_text()

またはかなり一致するものは、Webページに依存します。

4

2 に答える 2

1

eval文字列に格納された任意の Python 式を評価するために使用できます。ただし、これは危険です。ハッカーや悪意のあるユーザーは、悪意のあるコードをデータベースに挿入する可能性があります (たとえば、1000000**1000000Python を狂わせるために)。

于 2013-03-17T08:01:21.480 に答える
0

文字列の行から進んでリストを作成し、このようなことをできないのはなぜですか?

tags = soup.findAll(['div','span'])

また

soup.findAll(lambda tag: tag.name in ['div', 'span'] or tag['id'] == "eggs")

または多分もっと良い:

tags = soup.findAll(['div', 'span'])
tags.extend(soup.findAll(id="eggs"))

条件によっていくつかのタグを除外したい場合は、条件をラムダ式に追加できます。

例:

DB から:

s = 'div;span;table' # or something like this with structure

次のようにします。

tags_list = s.split(';')
tags = soup.findAll(tags_list)

あなたは主なアイデアを得たと思います。

于 2013-03-17T10:13:55.553 に答える