Python同步urllib2结果

时间:2013-03-28 23:51:44

标签: python networking request urllib

在我的软件的某个部分,我想简单地获取URL的源代码,然后我想解析该字符串(源代码)并执行某些操作。问题是,当我实际运行程序时,我无法弄清楚如何获取所述源代码,即使它在IDLE中有效。

import urllib2

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
req = urllib2.Request('http://www.google.com')
response = urllib2.urlopen(req)
page_source = response.read()

page_source

如果我这样做,例如,“page_source”将不会打印任何内容,它将只是静默并完成执行。我相信这是因为它不是同步的,但后来我不知道如何解决它。我甚至尝试过(作为一种绝望的尝试):

import urllib2
import time

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
req = urllib2.Request('http://www.google.com')
response = urllib2.urlopen(req)
page_source = response.read()

time.sleep(4)

page_source

这也行不通。

我已经考虑过获取response.code并制作一个while循环,其中包括:

while (response.code !== 200):
    time.sleep(4)

但是再一次,它失败了,因为“response.code”根本不会返回任何内容。

我并不担心用户被连接等问题,因为其余的代码已经解决了这个问题,我真的只需要弄清楚如何获取页面源并解析它。

1 个答案:

答案 0 :(得分:4)

请求确实是同步的。问题只是评估表达式实际上并不打印它。如果要查看值,则必须明确使用print

import urllib2

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
req = urllib2.Request('http://www.google.com')
response = urllib2.urlopen(req)
page_source = response.read()

print page_source

您可能已经注意到在Python shell中输入代码时不需要print。这是因为Python shell以与作为模块出现时稍微不同的方式解析和执行代码,检测输入是否作为独立表达式解析并自动打印(如果是)。执行源文件时,此简写不适用。

如果您对Python可以将字符串解析为源代码的不同方式的详细信息感兴趣,请参阅the built-in compile function;注意它有一个mode参数,可以在三种不同的可能解析模式之间进行选择。 Python shell使用模式single,而普通源文件编译为exec。最终模式evalPython's built in eval function使用。