Python 如何发送添加了空格的urllib2请求

Python 如何发送添加了空格的urllib2请求,python,urllib2,Python,Urllib2,我正在尝试发送一个请求,以打开使用空格的网页url,以便我可以从该网页下载文件。 在普通浏览器(即chrome)中,当您在地址栏中输入url时,文件将自动生成,并要求您下载 我不是每次需要一组日志时都要加载一个web浏览器,而是尝试创建一个python脚本,我可以运行它来完成所有的艰苦工作 例如: url = http (ip-address)/supportlog.xml/getlogs&name=0335008 04-05-2013 12.46.47.zip 我正在使用命令: x

我正在尝试发送一个请求,以打开使用空格的网页url,以便我可以从该网页下载文件。 在普通浏览器(即chrome)中,当您在地址栏中输入url时,文件将自动生成,并要求您下载

我不是每次需要一组日志时都要加载一个web浏览器,而是尝试创建一个python脚本,我可以运行它来完成所有的艰苦工作

例如:

url = http (ip-address)/supportlog.xml/getlogs&name=0335008 04-05-2013 12.46.47.zip 
我正在使用命令:

xml_page = opener.open((url))
我已经能够使用下面的命令和一些其他代码行从连接到的web服务器下载其他zip文件

但是当我对url使用相同的命令时,添加了空格

urllib2去掉了所有的空格,这意味着我得到了一个语法错误。 理想情况下,您可以将url更改为不包含空格,但这是不可能的

我已经尝试用%20来替换空白来寻址URL,但这不起作用,并导致服务器失败

我知道你可以使用
urllib.quote
工具,但不知道如何使用,甚至不知道这是否是正确的传球


欢迎任何帮助。。。我还在学习python,所以请善待我

要使用空格清理url,请使用
urllib.quote
如下所示:

import urllib
url = urllib.quote("http://www.example.com/a url with whitespaces")
要将文件下载到,不能使用
urllib2.urlopen
之类的函数。如果要使用
urllib
模块下载文件,则需要
urllib.urlretrieve
。但是,
请求
在开始时更容易掌握

import requests
response = requests.get(url)
响应提供了几个有用的功能:

  • response.text
    :网站的源代码或下载文件的内容
  • response.status\u code
    :请求的状态代码。200就可以了
您可能希望将下载的文件保存在某个位置。因此,在二进制模式下使用
open
打开一个文件连接,并写入响应的内容。别忘了关闭文件

your_file_connection = open('your_file', 'wb')
your_file_connection.save(response.text)
your_file_connection.flush()
your_file_connection.close()
摘要

import urllib
import requests

url = urllib.quote("http://www.example.com/a url with whitespaces")
response = requests.get(url)

your_file_connection = open('your_file', 'wb')
your_file_connection.save(response.text)
your_file_connection.
your_file_connection.close()

请求
文档:

尝试之后,我发现行: 您的\u文件\u connection.save(response.content)

需要: 您的\u文件\u connection.write(response.content)


至少在Python2上是这样。*

虽然Jon的答案当时是正确的,但请注意,在Python3.X中,您必须将其更改为:

import urllib.parse
url = urllib.parse.quote("http://www.example.com/a url with whitespaces"')

非常感谢。关于你的回答,我只有一个问题。当我发送get命令时,我会返回以下内容。”没有提供架构。也许你的意思是[链接]带有空格的url?不是有效的整数“”。我已经很好地查看了文档和网络,但是我找不到任何有帮助的东西。非常感谢。别担心,经过几个小时和大量的咖啡,我找到了解决办法。对于那些感兴趣的人来说,问题在于quote函数在不需要的地方添加了空格字符。诀窍是将完整的url分成空白和非空白。url\u main=url\u lower=/一个空白url,然后合并并放入请求函数thanksWorks!除了response.status应该是response.status\u代码和response.content应该是response.text(根据)之外,请注意,这在Python3.X中不再有效(请参见下面的新答案)