我有一个小工具,用于按计划从网站下载MP3,然后构建/更新播客XML文件,我显然已将其添加到iTunes.
创建/更新XML文件的文本处理是用Python编写的.我在Windows .bat文件中使用wget 来下载实际的MP3.我宁愿用Python编写整个实用程序.
我努力寻找一种方法来实际下载Python中的文件,因此我采用了wget.
那么,我如何使用Python下载文件?
我想通过Google Directions API动态查询Google地图.例如,此请求通过乔普林,密苏里州和俄克拉荷马城的两个航路点计算从伊利诺伊州芝加哥到洛杉矶的路线,OK:
它以JSON格式返回结果.
我怎么能用Python做到这一点?我想发送这样的请求,接收结果并解析它.
我在这里尝试做的是获取给定URL的标题,以便我可以确定MIME类型.我希望能够看到是否http://somedomain/foo/会返回HTML文档或JPEG图像.因此,我需要弄清楚如何发送HEAD请求,以便我可以读取MIME类型而无需下载内容.有谁知道这样做的简单方法?
在玩外部API时遇到了这个问题.我将我的身体数据作为字典直接发送到请求中,并且收到了400个错误:
data = {
"someParamRange": {
"to": 1000,
"from": 100
},
"anotherParamRange": {
"to": True,
"from": False
}
}
Run Code Online (Sandbox Code Playgroud)
当我添加一个json.dumps包装时,它可以工作:
data = json.dumps({
"someParamRange": {
"to": 1000,
"from": 100
},
"anotherParamRange": {
"to": True,
"from": False
}
})
Run Code Online (Sandbox Code Playgroud)
我不完全理解为什么这是必要的,因为字典和JSON对象在语法上是相同的.有人可以帮我理解幕后发生的事情吗?
为了完整性,这是我的标题:
headers = {'API-KEY': 'blerg', 'Accept-Encoding': 'UTF-8', 'Content-Type': 'application/json', 'Accept': '*/*', 'username': 'user', 'password': 'pwd'}
Run Code Online (Sandbox Code Playgroud)
编辑:
我之前没有提到这个,但现在我觉得它可能是相关的.我正在使用Python Requests库,另一篇文章似乎建议你永远不必将参数编码到请求对象:https://stackoverflow.com/a/14804320/1012040
"无论GET/POST是否你再也不需要编码参数,它只需要一个字典作为参数,并且很好."
好像序列化似乎不是必要的?
我的请求对象:
response = requests.post(url, data=data, headers=headers)
Run Code Online (Sandbox Code Playgroud) 我正在使用这个令人敬畏的库requests来维护python 2和3兼容性并简化我的应用程序请求管理.
我有一个案例,我需要解析一个网址并替换其中一个参数.例如:
http://example.com?param1=a&token=TOKEN_TO_REPLACE¶m2=c
Run Code Online (Sandbox Code Playgroud)
我希望得到这个:
http://example.com?param1=a&token=NEW_TOKEN¶m2=c
Run Code Online (Sandbox Code Playgroud)
随着urllib我可以这样做:
from urllib.parse import urlparse
from urllib.parse import parse_qs
from urllib.parse import urlencode
url = 'http://example.com?param1=a&token=TOKEN_TO_REPLACE¶m2=c'
o = urlparse(url)
query = parse_qs(o.query)
if query.get('token'):
query['token'] = ['NEW_TOKEN', ]
new_query = urlencode(query, doseq=True)
url.split('?')[0] + '?' + new_query
>>> http://example.com?param2=c¶m1=a&token=NEW_TOKEN
Run Code Online (Sandbox Code Playgroud)
你如何使用requests图书馆实现同样的目标?
我试过了
use std::rand::{task_rng, Rng};
fn main() {
// a number from [-40.0, 13000.0)
let num: f64 = task_rng().gen_range(-40.0, 1.3e4);
println!("{}", num);
}
Run Code Online (Sandbox Code Playgroud)
但这给了
error[E0432]: unresolved import `std::rand::task_rng`
--> rand.rs:1:17
|
1 | use std::rand::{task_rng, Rng};
| ^^^^^^^^ no `task_rng` in `rand`
error[E0432]: unresolved import `std::rand::Rng`
--> rand.rs:1:27
|
1 | use std::rand::{task_rng, Rng};
| ^^^ no `Rng` in `rand`
error[E0603]: module `rand` is private
--> rand.rs:1:17
|
1 | use std::rand::{task_rng, Rng};
| ^^^^^^^^
error[E0603]: module `rand` is private
--> …Run Code Online (Sandbox Code Playgroud) PHP代码:
<?php
$data=$_POST['data'];
echo $data;
?>
Run Code Online (Sandbox Code Playgroud)
当我这样做时,Python打印的HTML页面通知我PHP在$dataIe中没有收到任何值:
$ name错误; 未定义的索引
但是,当我将数据作为GET(http://localhost/mine.php?data=data)发送并将PHP方法从POST更改为GET($data=$_GET['data'])时,将获取并处理该值.
我的主要问题是,数据中的值似乎没有通过PHP,因为我本想使用POST.可能有什么不对?
我一直在玩美丽的汤和解析网页几天.我一直在使用一行代码,这些代码在我编写的所有脚本中都是我的救星.代码行是:
r = requests.get('some_url', auth=('my_username', 'my_password')).
Run Code Online (Sandbox Code Playgroud)
但......
我想用(打开一个带有身份验证的URL)做同样的事情:
(1) sauce = urllib.request.urlopen(url).read() (1)
(2) soup = bs.BeautifulSoup(sauce,"html.parser") (2)
Run Code Online (Sandbox Code Playgroud)
我无法打开网址并阅读需要身份验证的网页.我如何实现这样的目标:
(3) sauce = urllib.request.urlopen(url, auth=(username, password)).read() (3)
instead of (1)
Run Code Online (Sandbox Code Playgroud) 我们知道,python有两个内置的url lib:
urllib urllib2和第三方库:
urllib3如果我的要求只是通过GET方法请求API,则假设它返回一个JSON字符串.
我应该使用哪个lib?他们有一些重复的功能吗?
如果urllib可以实现我的要求,但是如果我的要求越来越复杂,urllib不能适合我的功能,我当时应该导入另一个lib,但我真的只想导入一个lib,因为我认为导入所有的他们可以让我困惑,我认为他们之间的方法是完全不同的.
所以现在我很困惑我应该使用哪个库,我更喜欢urllib3,我认为它可以满足我的要求所有时间,你怎么看?
python ×9
http ×3
python-3.x ×2
url ×2
urllib ×2
urllib2 ×2
content-type ×1
http-headers ×1
json ×1
php ×1
python-2.7 ×1
random ×1
request ×1
rust ×1
urllib3 ×1
validation ×1