urllib库是Python中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据
1、urlopen函数:
from urllib import request resp=request.urlopen('http://www.baidu.com') text=resp.read()#读取网页代码 text=resp.readline()#读取单行数据 text=resp.readlines()#读取多行数据 text=resp.getcode()#获取状态码 print(text)2、urlretrieve函数
request.urlretrieve('http://www.baidu.com','baidu.html') #下载需要爬取的网页到本地,并保存为baidu.html格式,也可保存为其他格式,比如图片保存为.jpg格式3、urlencode函数:urlencode可以把字典数据转换为URL编码的数据(当要请求的网址含有中文时,将中文编码然后在请求网页,否则会出错。)
from urllib import parse params={'name':'张三','age':18,'greet':'hello world'} rest=parse.urlencode(params) print(rest)4、parse_qs函数:将经过编码后的url参数进行解码
from urllib import parse qs = "name=%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80&greet=hello+world&age=100" print(parse.parse_qs(qs))5、urlparse和urlsplit函数:对这个url中的各个组成部分进行分割(唯一不一样的地方是,urlparse里面多了一个params属性,而urlsplit没有这个params属性)
from urllib import parse url='http//www.baidu.com/s?wd=python&username=abc#1' result=parse.urlparse(url) print(result)6、urllib 请求拉钩网页数据
from urllib import request from urllib import parse url='https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false' headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36', 'Referer':'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=', 'Cookie':'user_trace_token=20180512130512-a917fede-460a-481a-9b1a-f390d2e2e5a5; _ga=GA1.2.1479989032.1526101488; LGUID=20180512130514-0e5d9234-55a2-11e8-821f-5254005c3644; LG_LOGIN_USER_ID=f3ab1f1a72e03cd8c1c964963e148971a08e96fc2b572b81; index_location_city=%E5%85%A8%E5%9B%BD; JSESSIONID=ABAAABAAAGFABEF78DBB70DA2A4AA5CA9184E699181E250; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1540042668,1540103118,1540306511,1540475511; LGSID=20181025215206-28aa332a-d85d-11e8-a4cd-525400f775ce; PRE_UTM=; PRE_HOST=; PRE_SITE=; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2F; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1540475968; LGRID=20181025215943-39829161-d85e-11e8-a50e-525400f775ce; TG-TRACK-CODE=index_search; SEARCH_ID=d7d0d743d8564cb1ba48dbc93b3d234b'} data={'first':'true', 'pn':1, 'kd':'python'} req=request.Request(url,headers=headers,data=parse.urlencode(data).encode('utf-8'),method='POST') resp=request.urlopen(req) print(resp.read().decode('utf-8'))7、ProxyHandler处理器(代理设置)
a、代理的原理:在请求目的服务器之前,先请求代理服务器,然后让代理服务器去请求目的网站,代理服务器拿到目的网站的数据后,在转发给我们的代码。
b、http://httpbin.org:这个网站可以方便的查看http请求的一些参数。
c、在代码中使用代理:
*使用‘urllib.request.ProxyHandler',传入一个代理,这个代理是一个字典,字典key依赖于代理服务器能够接受的类型,一般是’http‘或者‘https’,值是‘ip:port’
*使用上一步创建的handler,以及request.build_opener创建一个opener对象
*使用上一步创建的opener,调用open函数,发起请求。
from urllib import request url='http://http://httpbin.org/ip' #使用ProxyHandler,传入代理构建一个handler handler=request.ProxyHandler({"http":"121.232.148.254:9000"}) #用时上面创建的handler构建一个opener opener=request.build_opener(handler) resp=opener.open(url) print(resp.read())8、cookie
格式:
参数意义:
NAME:cookie的名字。VALUE:cookie的值。Expires:cookie的过期时间。Path:cookie作用的路径。Domain:cookie作用的域名。 Set-Cookie: NAME=VALUE;Expires/Max-age=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE9、http.cookiejar模块:
该模块主要的类有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。这四个类的作用分别如下:
a、CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。
b、FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。
c、MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。
d、LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例
10、保存cookie到本地:save()
from urllib import request from http.cookiejar import MozillaCookieJar cookiejar = MozillaCookieJar("cookie.txt") handler = request.HTTPCookieProcessor(cookiejar) opener = request.build_opener(handler) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36' } req = request.Request('http://httpbin.org/cookies',headers=headers) resp = opener.open(req) print(resp.read()) cookiejar.save(ignore_discard=True,ignore_expires=True)11、从本地加载cookie(load())
from urllib import request from http.cookiejar import MozillaCookieJar cookiejar = MozillaCookieJar("cookie.txt") cookiejar.load(ignore_expires=True,ignore_discard=True) handler = request.HTTPCookieProcessor(cookiejar) opener = request.build_opener(handler) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36' } req = request.Request('http://httpbin.org/cookies',headers=headers) resp = opener.open(req) print(resp.read())
