首先,您有一堆 URL,并且您想获取它们引用的页面的来源:
urls = ['http://example.com/foo', 'http://example.com/bar']
pages = {url: urllib2.urlopen(url).read() for url in urls}
现在,您想找出其中哪些包含来自dle_act_lang
. 一种方法是将所有内容转换为set
s 并仅使用 set 交集:
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 进行排序!” 我不知道您所说的“按这两条代码行排序”是什么意思,但是无论您的意思是,在您要求的内容或此代码中都没有进行排序。
从您以后的编辑来看,您可能正在搜索一行 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]
set
但是,如果这些实际上是完整的行,并且它们有很多,那么您可能希望使用s of lines而不是words ,而不是为要搜索的每一行代码重复,然后返回到某些内容就像我给出的第一个例子:
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]