2013-02-15 16 views
-1

我想創建一個python腳本(但沒有結果,直到現在)從url列表中返回包含在源代碼中的url總之,在我的情況是兩個含有它們中的一些Python - 在網站的源中搜索並打印出網站,當它找到一個單詞

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

,其中一些類型的網址:

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

這兩條線是我尋找的話,而不是單獨的人

請有人可以幫我創建這個腳本?我要的只是通過這兩個代碼行來排序這些url!

+3

這不是Python。 Python沒有'var'關鍵字或分號。你確定你沒有在JavaScript或其他語言中尋找答案嗎? – abarnert 2013-02-16 00:03:41

+0

現在,您已經將整行JavaScript(或任何它)放入字符串中。那麼這是否意味着您正在嘗試搜索任何具有這些JavaScript內容的頁面?因爲如果是這樣,它會更簡單一些。 – abarnert 2013-02-16 01:10:43

+0

@abarnert是的,這就是我試圖做的! – 2013-02-16 20:59:21

回答

1

首先,你有一堆網址,然後你想他們是指在網頁源:

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

現在,你要找出他們的包含dle_act_lang任何單詞。要做到這一點的方法之一是一切都轉化爲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進行排序!我不知道「按這兩條代碼排序......」是什麼意思,但無論你的意思是什麼,在你要求的內容或代碼中都沒有排序。


從你以後的編輯,它看​​起來像你可能會尋找一個行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的而不是,並返回到像我給第一個例子:

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] 
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'] 
+1

我不認爲他想匹配網址的文字。首先,他說「包含源代碼」,可能意味着URL所指向的頁面的來源。而且,雖然這可能不明確,但他也在尋找諸如「是」的東西,這些東西不太可能出現在URL中,而很可能出現在網頁上。 – abarnert 2013-02-16 00:16:41

+0

是的,你的代碼「dlink」只在鏈接中搜索!但我需要在源代碼中搜索,然後返回鏈接 – 2013-02-16 00:54:23