如何在不使用浏览器的情况下用Python打开URL?
我想用Python代码打开一个网址,但我不想使用“webbrowser”这个模块。我试过了,确实能打开网址(它在我默认的浏览器中打开,但我就是不想这样)。于是我尝试了用urllib(urlopen)和mechanize。这两个都能正常运行,但它们都没有把我的请求发送到网站上!
这是我代码的一部分:
finalURL="http://www.locationary.com/access/proxy.jsp?ACTION_TOKEN=proxy_jsp$JspView$SaveAction&inPlaceID=" + str(newPID) + "&xxx_c_1_f_987=" + str(ZA[z])
print finalURL
print ""
br.open(finalURL)
page = urllib2.urlopen(finalURL).read()
当我访问locationary.com这个网站时,根本没有显示出任何变化!不过当我用“webbrowser”时,提交网址后网站上确实有变化。我该怎么做才能像“webbrowser”那样,而不真正打开浏览器呢?
我觉得这个网站需要一个“GET”请求。
2 个回答
HTTP GET请求在客户端不需要特别的代码或操作:它只是基本的URL(http://server/)加上路径和可选的查询参数。
如果URL是正确的,那么上面的代码应该可以正常工作。接下来你可以尝试以下几点:
这个URL真的正确吗?可以使用Firebug或者类似的工具来查看网络流量,这样你就能看到完整的URL和HTTP请求中的所有头信息。
可能这个网站需要你先登录。如果是这样,确保你正确设置了cookies。
有些网站需要正确的“来源”字段(为了防止别人直接链接到他们的内容)。把你浏览器使用的来源头信息加到请求中。
服务器的日志文件是解决这类问题的好帮手——前提是你能访问到它。
我不太清楚你用的是什么操作系统,不过如果你用的是像 httpscoop(适用于Mac)或者Fiddler(适用于PC)或者Wireshark这样的工具,你应该能监控到网络流量,看看发生了什么。可能是网站进行了重定向(你的浏览器会跟着这个重定向走),或者还有其他后续的活动。
你可以先启动一个HTTP嗅探器,然后用浏览器发起请求,观察一下网络流量。完成这个后,再用Python脚本试一下,看看请求是否成功发出,以及HTTP流量有什么不同。这样应该能帮助你找出问题所在。