import urllib.parse
import urllib.request
data =urllib.parse.urlencode({"wd": "haha"})
url="http://baidu.com/s"
request=urllib.request.Request(url+'?'+data)
response=urllib.request.urlopen(request)
th_page=response.read().decode('utf8')
f=open('learnPY\\out.html','w',encoding='utf-8')
f.write(th_page)
f.close()
print("DONE")
上头代码是get方式,GET方式是直接以链接形式访问,链接中包含了所有的参数,当然如果包含了密码的话是一种不安全的选择,不过你可以直观地看到自己提交了什么内容。POST则不会在网址上显示所有的参数。post参考下段代码:
import urllib
import urllib2
values = {"username":"1016903103@qq.com","password":"XXXX"}
data = urllib.urlencode(values)
url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
request = urllib2.Request(url,data)
response = urllib2.urlopen(request)
print response.read()
该段代码适用于2.X版本
卡住的地方是文本的encode和decode
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
- decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
- encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
另:文本存储要注意路径设置!
经人介绍,安装了第三方库:requests
修改如下:
import requests
data ={"wd": "haha"}
url="http://baidu.com/s"
request=requests.get(url, params=data)
f=open('out.html','w',encoding='utf-8')
f.write(request.text)
f.close()
print("DONE")