Python同步urllib2结果

标签 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”根本不返回任何东西。

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

最佳答案

请求确实是同步的。问题只是评估一个表达式并没有实际打印它。如果你想看到你必须显式使用 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,而普通源文件被编译为execPython's built in eval function 使用最终模式 eval .

关于Python同步urllib2结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15694192/

相关文章:

python - 如何删除 Airflow 中的默认示例 dag

Python:无法从json获取数据并转换为列表

Python Tkinter : How to disable window showing in taskbar?

c - 有没有办法从 C 中收到的数据包中读取 url?

java - 为什么这个Java程序会导致UDP丢包?

iOS 5+ - 在执行请求时卡住主线程执行

python - 考虑到 p 在 python 中是素数,当我执行 p/p+1 + p+1/p 操作时出错

kubernetes - 什么时候在 Kubernetes 中选择 "LoadBalancer"而不是 "NodePort"服务类型(反之亦然)以向外部公开服务?

c - 是否可以附加一个回调以在请求完成时执行?

ios - 将请求数据从 UIPageViewController 传递到 subview