2011-08-10 144 views
0

我想使用urllib2刮一個網站。但是,我得到一個400頁面未找到錯誤。這裏是我的代碼:404錯誤urllib2.urlopen()

rec_text = 'Genesis 1:1' 
my_text = rec_text.strip() 
book = my_text.split()[0] 
chapter_verse = my_text.split()[1] 
chapter = chapter_verse.split(':')[0] 
verse = chapter_verse.split(':')[1] 
webpage = urllib2.urlopen('http://bible.cc/'+book+'/'+chapter+'-'+verse+'.htm').read() 
stuffToSearch = "" 
for line in webpage: 
    stuffToSearch += line 
search_for = re.compile(r'<a href="http://kingjbible.com/'+book+'/'+chapter+'.htm">King James Bible</a></span><br>(.*)<p><span class="versiontext"><a href="http://kjv.us/'+book+'/'+chapter+'.htm">') 
search_it = re.search(search_for, stuffToSearch) 
print(search_it.group(1)) 
+1

確保您嘗試「urlopen」的URI指向可用資源。 –

回答

0

該過程是正確的,只是形成的網址可能不正確。

爲什麼不把'http://bible.cc/'+book+'/'+chapter+'-'+verse+'.htm'這個分配給一些變量&在發送給urlopen之前打印它?

這樣你可以驗證url是否形成正確。

+0

我想通了。有問題的URL需要'書',而我已經通過'書',因此404。謝謝! – user1070619

+0

酷!如果有任何答案幫助你,標記它,以便它可以幫助社區... –

1

看看bible.cc網站,似乎大寫字母很重要。您需要genesis而不是Genesis,您可以將該行更改爲book = my_text.split()[0].lower()

編輯:其餘部分實際上並不涉及錯誤,但有一些其他提示。

如果您有一個操作輸出兩個或多個值,則可以使用多個賦值來簡化代碼。

rec_text = 'Genesis 1:1' 
my_text = rec_text.strip().lower() 
book, chapter_verse = my_text.split() 
chapter, verse = chapter_verse.split(':') 

還有一種方法可以將字符串列表連接在一起,而無需使用for循環。使用join,其中調用它的字符串將用作列表元素之間的分隔符(基本上與split相反)。

stuffToSearch = "".join(webpage) 

我想有什麼不對的頁面檢索的,雖然我想像readlines將略高於read更有效。與正則表達式相同;如果您只使用一次,則無需編譯它。但是,您可能很容易想出一個獨立於可重複使用的書和章的表達式。

+0

感謝您的指針;我覺得這是'創世紀'而不是'創世'的事情。並感謝您的額外信息,非常有用! – user1070619

相關問題