最初に、たくさんの URL があり、それらが参照するページのソースを取得したいとします。
urls = ['http://example.com/foo', 'http://example.com/bar']
pages = {url: urllib2.urlopen(url).read() for url in urls}
ここで、それらのどれに からの単語が含まれているかを調べたいとしますdle_act_lang
。これを行う 1 つの方法は、すべてをset
s に変換し、単に集合集合を使用することです。
pagesets = {url: set(page.split()) for url, page in pages.iteritems()}
wordset = set(dle_act_lang)
matching_urls = [url for url, pageset in pagesets.iteritems() if wordset & pageset]
それでおしまい。
ただし、これは最初の質問に答えますが、質問の終わりまでに、まったく別のことを求めているように見えます。「これらの URL をこれらの 2 つのコード行で並べ替えるだけです!」「並べ替え…これらの2つのコード行で」とはどういう意味かわかりませんが、何を意味するにせよ、あなたが要求したもの、またはこのコードでは並べ替えが行われていません。
後の編集から、次のような JavaScript コードの行を検索しているように見えます。
"var dle_act_lang = ["Yes", "No", "Enter", "Cancel", "Save"];"
したがって、それを作成して実行する必要はありwordset
ませんwordset & pageset
。JS コードとページを古い文字列のままにして、in
演算子を使用するだけです。
urls = ['http://example.com/foo', 'http://example.com/bar']
pages = {url: urllib2.urlopen(url).read() for url in urls}
jscode = '''"var dle_act_lang = ["Yes", "No", "Enter", "Cancel", "Save"];"'''
matching_urls = [url for url, pages in pages.iteritems() if jscode in page]
ただし、これらが実際には完全な行であり、それらが非常に多い場合は、検索するコードの行ごとにそれを繰り返すのではなく、 wordsの代わりにset
s of linesを使用して、何かに戻ることをお勧めします。私が与えた最初の例のように:
urls = ['http://example.com/foo', 'http://example.com/bar']
pages = {url: urllib2.urlopen(url).read() for url in urls}
pagesets = {url: set(line.strip() for line in page.split('\n'))
for url, page in pages.iteritems()}
jscodeset = {'''"var dle_act_lang = ["Yes", "No", "Enter", "Cancel", "Save"];"''',
'''"var dle_act_lang = ["Да", "Нет", "Ввод", "Отмена", "Сохранить"];"''']}
matching_urls = [url for url, pageset in pagesets.iteritems() if wordset & pageset]