-1

我正在尝试创建一个 python 脚本(但直到现在还没有结果)以从 url 列表中返回包含源中一个单词的 url,在我的情况下是两种类型的 url,其中包含其中一些

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

其中一些:

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

这两行是我正在搜索的单词,而不是单独的单词

请问有人可以帮我创建这个脚本吗?我想要的只是通过这两个代码行对这些 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. 一种方法是将所有内容转换为sets 并仅使用 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]
于 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 回答