[英]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.