在python2中,urllib和urllib2各有各个的功能,虽然urllib2是urllib的升级版,但是urllib2还是不能完全替代urllib,但是在python3中,全部封装成一个类urllib。
Urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接受一个URL。这就意味着你不能通过urllib伪装自己的请求头。Urllib模板可以提供运行urlencode的方法,该方法用于GET查询字符串的生成,urllib2的不具备这样的功能,而且urllib.quote等一系列quote和unquote功能没有被加入urllib2中,因此有时也需要urllib的辅助。这就是urllib和urllib2一起使用的原因。。quote用来url转码的。
Request import urllib.request urllib.request.Request(url, data=None, headers = {}, method= None) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3', 'Referer': 'http://www.lagou.com/zhaopin/Python/?labelWords=label', 'Connection': 'keep-alive' }http的头信息可以直接使用字典的形式。
Request如果要发送data,并无法直接传入字典类型的参数,需要进行数据转换,你可以直接使用类似于get传出参数的方法,也可以使用urllib给我们提供的类。
from urllib import request, parse data = { 'first': 'true', 'pn': 1, 'kd': 'Python' } data = parse.urlencode(data).encode('utf-8') print(data) 结果: b'first=true&pn=1&kd=Python‘
urlencode()主要作用就是将url附上要提交的数据。Post的数据必须是bytes或者iterable of bytes,不能是str,因此需要进行encode()编码。
urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None)
如果已经知道cookie,或者说你是通过抓包获取到的cookie,直接放在header的信息中直接登陆就可以;登陆京东网站的cookie信息和不登录京东的cookie信息是不一样的。你可以登录京东以后,抓取cookie的信息,然后访问任何网站就可以了。
import urllib.request url = “http://www.jd.com" header = {"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36", "cookie": "xxxxx"} req = urllib.request.Request(url=url, headers=header) res = urllib.request.urlopen(req) text = res.read()
在python2中cookie的类叫做:import cookielib在python3中cookie的类叫做:import http.cookiejar
当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。urlopen是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。
终端输出cookie对象 import urllib.request import http.cookiejar url = "http://www.hao123.com" req = urllib.request.Request(url) cookiejar = http.cookiejar.CookieJar() handler = urllib.request.HTTPCookieProcessor(cookiejar) opener = urllib.request.build_opener(handler) r = opener.open(req) print(cookiejar) <CookieJar[<Cookie BAIDUID=93B415355E0704B2BC94B5D514468898:FG=1 for .hao123.com/>, <Cookie hz=0 for .www.hao123.com/>, <Cookie ft=1 for www.hao123.com/>, <Cookie v_pg=normal for www.hao123.com/>]>
MozillaCookieJar继承FileCookieJar()继承CookieJar
转载于:https://www.cnblogs.com/yangjian319/p/9188296.html
