urllib2.urlopen()上的404错误

时间:2011-08-10 11:02:58

标签: python urllib2

我正在尝试使用urllib2抓取一个网站。但是我得到了400页未找到错误。这是我的代码:

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))

2 个答案:

答案 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略微提高效率。与正则表达式相同;如果你只使用它一次,你不需要编译它。你可能很容易想出一个独立于可以重复使用的书和章节的表达式。

答案 1 :(得分:0)

这个过程是正确的,只是形成的网址可能不正确。

为什么不将'http://bible.cc/'+book+'/'+chapter+'-'+verse+'.htm'分配给某个变量&amp;在将其发送到urlopen之前将其打印出来?

这样您就可以验证网址是否正确。