繁体   English   中英

在python 3中提交Web表单

[英]Submitting a web form in python 3

请有人可以将以下内容从python2转换为python3;

import requests

url = "http://duckduckgo.com/html"
payload = {'q':'python'}
r = requests.post(url, payload)
with open("requests_results.html", "w") as f:
f.write(r.content)

我得到;

Traceback (most recent call last):
File "C:\temp\Python\testFile.py", line 1, in <module>
import requests
ImportError: No module named 'requests'

我也尝试过;

import urllib.request

url = "http://duckduckgo.com/html"
payload = {'q':'python'}
r = urllib.request.post(url, payload)
with open("requests_results.html", "w") as f:
f.write(r.content)

但我明白了

Traceback (most recent call last):
File "C:\temp\Python\testFile.py", line 5, in <module>
r = urllib.request.post(url, payload)
AttributeError: 'module' object has no attribute 'post'

因此,在python3.2中,r.content是一个字节字符串,而不是str,并且write不喜欢它。 您可能要使用r.text代替:

with open("requests_results.html", "w") as f:
    f.write(r.text)

您可以在http://docs.python-requests.org/en/latest/api.html#main-interface的请求文档中看到它

 class requests.Response content - Content of the response, in bytes. text - Content of the response, in unicode. if Response.encoding is None and chardet module is available, 

编码将被猜测。

编辑:

我在看到编辑过的问题之前发布了信息。 是的,就像Martijn Pieters所说的那样,您需要为python3安装requests模块才能导入它。

我认为这里的问题是没有安装请求包。 或者,如果已安装,它将安装在python2.x目录中,而不是python3中,因此这就是为什么您不能使用请求模块的原因。 尝试将python3设置为默认副本,然后安装请求。

也可以尝试访问Michael Foord的这篇文章 ,它会带您逐步了解urlib2的所有功能。

import urllib.request
import urllib.parse

url = "https://duckduckgo.com/html"
values = {'q':'python'}
data = urllib.parse.urlencode(values).encode("utf-8")

req = urllib.request.Request(url, data)
response = urllib.request.urlopen(req)
the_page = response.read()

print(the_page)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM