-1

ソースに単語を含むURLをURLのリストから返すために、Pythonスクリプトを作成しようとしています(ただし、今まで結果はありません)。私の場合、それらのいくつかを含む2種類のURLです。

"var dle_act_lang   = ["Yes", "No", "Enter", "Cancel", "Save"];"

そしてそれらのいくつか:

"var dle_act_lang   = ["Да", "Нет", "Ввод", "Отмена", "Сохранить"];"

2行は私が探している単語であり、別々のものではありません

誰かこのスクリプトの作成を手伝ってくれませんか? 私が望むのは、これらの 2 つのコード行でこれらの URL を並べ替えることだけです!

4

2 に答える 2

1

最初に、たくさんの URL があり、それらが参照するページのソースを取得したいとします。

urls = ['http://example.com/foo', 'http://example.com/bar']
pages = {url: urllib2.urlopen(url).read() for url in urls}

ここで、それらのどれに からの単語が含まれているかを調べたいとしますdle_act_lang。これを行う 1 つの方法は、すべてをsets に変換し、単に集合集合を使用することです。

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の代わりにsets 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]
于 2013-02-16T00:07:30.597 に答える
0
urls = ['http://yahoo.com', 'http://google.com', 'http://facebook.com', 'http://turnplay.com']
words = ['book', 'play']

matches = []

for url in urls:
   for word in words:
      if word in url:
         matches.append(url)

print matches  # <== ['http://facebook.com', 'http://turnplay.com']
于 2013-02-16T00:14:56.267 に答える