2011-08-10 115 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

相关问题