我正在尝试使用urllib2打开URL并将特定的cookie文本发送到服务器.例如,我想打开网站解决国际象棋问题,使用特定的cookie,例如search = 1.我该怎么做?
我正在尝试执行以下操作:
import urllib2
(need to add cookie to the request somehow)
urllib2.urlopen("http://chess-problems.prg")
Run Code Online (Sandbox Code Playgroud)
提前致谢
我打开网址:
site = urllib2.urlopen('http://google.com')
我想要做的是用同样的方式连接我在某个地方告诉我:
site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})
但那也不起作用.
我知道urllib2有类似代理处理程序的东西,但我不记得那个功能.
我收到"HTTP错误500:内部服务器错误"响应,但我仍然想读取错误HTML中的数据.
使用Python 2.6,我通常使用以下方法获取页面:
import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()
Run Code Online (Sandbox Code Playgroud)
当尝试在失败的URL上使用它时,我得到异常urllib2.HTTPError:
urllib2.HTTPError: HTTP Error 500: Internal Server Error
Run Code Online (Sandbox Code Playgroud)
如何urllib2在返回内部服务器错误时获取此类错误页面(有或没有)?
请注意,对于Python 3,相应的例外是urllib.error.HTTPError.
好的,我需要使用Python下载一些网页,并快速调查我的选项.
包含在Python中:
urllib - 在我看来,我应该使用urllib2代替.urllib没有cookie支持,只有HTTP/FTP /本地文件(没有SSL)
urllib2 - 完整的HTTP/FTP客户端,支持最需要的东西,如cookie,不支持所有HTTP动词(只有GET和POST,没有TRACE等)
功能齐全:
机械化 - 可以使用/保存Firefox/IE cookie,采取跟随第二个链接的行动,积极维护(2011年3月发布0.2.5)
PycURL - 支持curl所做的一切(FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP),坏消息:自2008年9月9日起未更新(7.19.0)
新的可能性:
urllib3 - 支持连接重用/池和文件发布
不推荐使用(也就是使用urllib/urllib2):
httplib - 仅限HTTP/HTTPS(无FTP)
httplib2 - 仅限HTTP/HTTPS(无FTP)
让我印象深刻的第一件事是urllib/urllib2/PycURL/mechanize都是非常成熟的解决方案,效果很好.机械化和PycURL附带了许多Linux发行版(例如Fedora 13)和BSD,所以安装通常不是问题(所以这很好).
urllib2看起来不错,但我想知道为什么PycURL和机械化看起来都非常受欢迎,是否有一些我缺少的东西(即如果我使用urllib2,我会在某个角落将自己画到一个角落?).我真的很喜欢这些事情的优点/缺点的反馈,所以我可以为自己做出最好的选择.
编辑:在urllib2中添加了关于动词支持的注释
任何人都可以指出一个教程,告诉我如何使用urllib2进行POST请求,数据是JSON格式?
我正在使用
data=urllib2.urlopen(url).read()
Run Code Online (Sandbox Code Playgroud)
我想知道:
如何判断URL中的数据是否被gzip压缩?
如果数据被压缩,urllib2会自动解压缩数据吗?数据总是一个字符串吗?
当使用Python 2.7 urllib2从API检索数据时,我收到错误[Errno 104] Connection reset by peer.什么导致错误,以及如何处理错误,以便脚本不会崩溃?
ticker.py
def urlopen(url):
response = None
request = urllib2.Request(url=url)
try:
response = urllib2.urlopen(request).read()
except urllib2.HTTPError as err:
print "HTTPError: {} ({})".format(url, err.code)
except urllib2.URLError as err:
print "URLError: {} ({})".format(url, err.reason)
except httplib.BadStatusLine as err:
print "BadStatusLine: {}".format(url)
return response
def get_rate(from_currency="EUR", to_currency="USD"):
url = "https://finance.yahoo.com/d/quotes.csv?f=sl1&s=%s%s=X" % (
from_currency, to_currency)
data = urlopen(url)
if "%s%s" % (from_currency, to_currency) in data:
return float(data.strip().split(",")[1])
return None
counter = 0
while True: …Run Code Online (Sandbox Code Playgroud) 我想在使用urllib2.urlopen(..)时在我的请求中发送自定义"Accept"标头.我怎么做?
我在urllib2的urlopen中使用了timeout参数.
urllib2.urlopen('http://www.example.org', timeout=1)
Run Code Online (Sandbox Code Playgroud)
如何告诉Python如果超时到期,应该引发自定义错误?
有任何想法吗?
我想抓住一个特定的http错误,而不是整个家庭中的任何一个..我想要做的是 -
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError:
<whatever>
Run Code Online (Sandbox Code Playgroud)
但我最终得到的是捕获任何类型的http错误,但我只想抓住指定的网页不存在!! 可能那是HTTP错误404 ..但我不知道如何指定只捕获错误404并让系统运行其他事件的默认处理程序..建议?