Python3之urllib库学习笔记

urilib库

1、了解urllib库

是Python自带的网络请求库,可以模拟浏览器的行为,向指定服务器发送一个请求,并可以保存服务器返回的数据。

2、熟练掌握urllib函数

urlopen

一个表示远程url的类文件对象,然后像本地文件一样操作这个对象来获取远程数据。

案例:

from urllib import request
resq = request.urlopen('https://www.baidu.com')
print(resq.read())

url:请求的url

data:请求的数据,如果设置了这个值,那么将变成post请求

返回值:返回值是一个http.client.HTTPResponse对象。

  1. read():返回指定长度数据
  2. readline():返回单行数据
  3. readlines():返回逐行数据
  4. getcode():返回状态码()

urlretrieve函数

这个行数可以方便的将网页上的一个文件保存到本地

from urllib import request
request.urlretrieve(url,文件名)

urlencode函数:编码

urlencode可以把字典数据转换成URL编码的数据

from urllib import parse
data = {'name':'老王','age':18,'greet':'Hello world'}
qs = parse.urlencode(data)
print(qs)

#补充对字符串编码
a = '石原里美'
b = parse.quote(a)
print(b)

parse_qs函数:解码

parse_qs可以把URL编码数据解码为字典数据

print(parse.parse_qs(qs))
#接上

urlparse和urlsplit函数:解析url

对url的各个组成部分进行分割

from urllib import parse
url = 'http://www.baidu.com/index.html;user?id=s#comment'
result = parse.urlparse(url)
print(result)
#urlsplit不包含params属性
result = parse.urlsplit(url)
print(result)

requset.Request类

在请求是增加一些请求头,比如增加一个User-Agent

from urllib import request
headers = {}
rq= request.Request('https://www.baidu.com/',headers = headers)
resp = request.urlopen(rq)
print(resp.read())

proxyHandler处理器(代理设置),解决封ip:

http://httpbin.org:这个网站可以方便的查看htp请求的一些参数

常用的代理有:
西刺免费代理:http://www.xicidaili.com
快代理:http://www.kuaidaili.com
代理云http://www.dailiyun.com

from urllib import request
url = 'http://httpbin.org/ip'
#使用Proxyhandler,传入代理构建一个handler
handler = request.ProxyHandler({'http':'171.35.146.47:9999'})
#使用handler构建一个opener
opener = request.build_opener(handler)
#使用opener发送请求
rq =opener.open(url)

cookie:

指某些网站为了辨别用户身份、进行 session跟踪而储存在用户本地终端上的数据
cookie的格式
Set-Cookie: NAME-VALUE: Expires/Max-age=DATE; Path=PATH; Domain=DOMAIN_NAME: SECURE
参数意义
NAME: cookie的名字。
VALUE: cookie的值。
Expires: cookie的过期时间
Path: cookie作用的路径。
Domain: cookie作用的域名
SECURE:是否只在https协议下起作用。

cookie实战1:模拟知乎登陆
#网页Network:Request Headers:cookie
from urllib import request

url = 'http://www.zhihu.com/hot'
headers = {
    'cookie':'_zap=90fb470a-3d0e-46d8-86e2-48cbd7011847; d_c0="AACZsvckwRCPTkg8gZbxqZiYG56FbHJkzhY=|1580619608"; capsion_ticket="2|1:0|10:1581470479|14:capsion_ticket|44:ZjdjYTYyMzFhZTRkNDJlMmE1MzQ0YzUxYzJkYWUyYjU=|bc168dc0ebd879a113e087d08fb93c19a3796d2beca11b8c5981502df3f5ebc8"; z_c0="2|1:0|10:1581470485|4:z_c0|92:Mi4xOGFCUERRQUFBQUFBQUpteTl5VEJFQ1lBQUFCZ0FsVk5GYUV3WHdEd1Y3cGVZdWJ2VWVsdy1YeEd2RFctYnBNcURR|44cd8e0099ad2659aaa12aea79f891ae0f8a4b46bde8a31128047b7ebdb2ab97"; _xsrf=ef03277f-8e27-45a7-b100-63823e822cfb; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1581576284,1581673467,1581686994,1581951739; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1581951739; tst=h; tshl=; KLBRSID=031b5396d5ab406499e2ac6fe1bb1a43|1581951744|1581951732'
}
wq = request.Request(url,headers=headers)
rq = request.urlopen(wq)
print(rq.read().decode('utf-8'))
cookie实战2:http.cookiejar模块模拟登陆知乎

http.cookiejar模块的类有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar

CookieJar:管理cookie值、储存HTTP请求生成的cookie向HTTP传输的请求添加cookie的对象。储存在内容中,对cookieJ回首,cookie也将丢失

FileCookieJar:检索cookie信息并储存为文件。delayload为True时支持延迟访问文件,即需要时才读取文件或在文件中储存。

from urllib import request
from urllib import parse
from http.cookiejar import CookieJar
url = 'https://i.meishi.cc/login_t.php?username=v78297944%40gmail.com&login_type=2&password=a000000&cookietime=on'
#创建对象
cookiejar = CookieJar()
handler = request.HTTPCookieProcessor(cookiejar)
opener =request.build_opener(handler)
#发送登陆请求
post_url = url
post_data = parse.urlencode({
    'username':'v78297944@gmail.com',
    'password':'a000000'
})
req = request.Request(post_url,data= post_data.encode('utf-8'))
opener.open(req)
#登陆网页
url = 'https://i.meishi.cc/cook.php?id=14456897'
rewq = request.urlopen(url)
print(rewq.read().decode('utf-8'))

Cookie加载与保存

from urllib import request
from http.cookiejar import MozillaCookieJar

cookiejar = MozillaCookieJar()
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)
resp = opener.open('http://www.baidu.com')

cookiejar.save('cookie.txt',ignore_discard=True,ignore_expires=True)

ignore_discard=True即使cookie即将被丢弃也要保存下来。
ignore_expries=True如果cookie已经过期也要保存下来并且文件存在时也将覆盖。

from urllib import request
from http.cookiejar import MozillaCookieJar

cookiejar = MozillaCookieJar('cookie.txt')
cookiejar.load()
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)
resp = opener.open('http://www.baidu.com')

for cookie in cookiejar:
    print(cookie)

案例:

1. 爬取猫眼

from urllib import request
url = 'http://piaofang.maoyan.com/second-box'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36 Edg/80.0.361.54'}
rq =request.Request(url,headers= headers)
wq =request.urlopen(rq)
print(wq.read().decode('utf-8'))
#需要的数据如果没在源代码中,则有可能出现在Json文件中。通过NetWork查看JSon文件的get地址,替换url获取内容

2. 爬去别逗了网多页内容

from urllib import request
for i in range(8845,8850):
    url = 'https://www.biedoul.com/index/'+str(i)
    rq = request.Request(url)
    wq = request.urlopen(rq)
print(wq.read().decode())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值