2011-11-20 77 views
1

我有一個單詞列表,在Python中我需要遍歷每個單詞並檢查單詞是否在網站上。使用Python檢查某個單詞是否在網頁上?

目前,這是我有什麼(關於這個問題)一個片斷:

words = ['word', 'word1', 'word2'] 
site = urllib.request.urlopen(link) 
for word in words: 
    if word in site: 
     print(word) 
    else: 
     print(word, "not found") 

我有一個單詞列表,我打開網站,我遍歷每個字檢查單詞在網站中。請注意,我正在使用一個包含所有這些詞的網站(我自己設置了它,我可以驗證它是否有效),鏈接是網站的網址。

的問題是,我經常去「沒有發現」,它似乎永遠不會在網站上找到的話。

代碼有什麼問題?它似乎是一個語義錯誤,因爲語法工作正常,並沒有拋出異常(雖然在我的最後,我確實有異常處理,但它仍然會報告異常是否拋出異常)。

+0

@larsmans你是什麼意思的urllib.request.urlopen是一個公然的錯誤?它出什麼問題了? – Bhaxy

+2

@larsmans:['urllib.request.urlopen'](http://docs.python.org/py3k/library/urllib.request)有什麼問題?也許你不熟悉Python 3的標準庫? –

+0

@GregHewgill,Bhaxy:對不起,誤解了我的錯誤信息。我還沒有真正趕上Python 3庫的速度。 –

回答

6

urlopen()函數返回一個「類文件對象」。爲了讀取數據,你必須調用read()

site = urllib.request.urlopen(link).read() 

還有其他的方法來讀取過的數據,但這是整個頁面的數據加載到內存中,以便快速搜索的簡單方法。

您的代碼按寫入方式工作的原因是因爲文件類對象也是可迭代的,這意味着它可以與in運算符一起使用。但它沒有做你想做的事。

+0

好吧,所以它現在似乎工作,我已經完成了打印(網站),我已經看到它似乎下載的網站,但我在網站上的文字是在下載。我用我的代碼,我也複製並將結果粘貼到記事本中,但無法找到結果。怎麼了? – Bhaxy

+3

您正在查找的單詞可能並不存在於下載的HTML中。當頁面加載到瀏覽器中時,它們可能會在稍後使用Javascript添加到DOM中。如果沒有關於您正在加載的網頁和您要查找的字詞的更多信息,則很難提供更具體的答案。 –

1

這也有助於解碼鏈接內容。否則它被讀爲字節。我有類似的問題。嘗試

temp = urllib.request.urlopen(link) 
HTML = temp.read().decode("utf-8") 

這將使用Unicode 鏈接可能不使用Unicode編碼解碼的鏈接。你可以找出編碼請求的網站標題

+0

謝謝,這解決了我在Greg Hewgill的回答中提出的問題。 – Bhaxy

+1

temp.getheader('Content-Type')應該返回編碼類型的信息。如果這不起作用,請嘗試通常在英文網站上正常工作的utf-8 – Oliver

+1

只是爲了澄清這方面的一個常見錯誤。您不是使用Unicode解碼文本,而是使用UTF-8字符集將文本解碼爲unicode字符串。 Unicode與UTF-8(或其他任何字符集)並不相同。閱讀http:// www。joelonsoftware.com/articles/Unicode.html獲取有關該主題的更多信息。 – Epcylon