urllib库(python内置库)

urlopen函数:

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

url:请求的url。
data:请求的data,如果设置了这个值,那么将变成post请求。
返回值:返回值是一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象。有read(size)、readline、readlines以及getcode等方法。

例如:

from urllib import request

resp = request.urlopen("https://www.sogou.com/")
print(resp.read())
#若显示二进制代码,可以进行转码,以上print代码写为:print(resp.read().decode('utf-8'))
#resp.read(10)--提取前10个字符
#resp.readline()--提取第1行
#resp.readlines--提取多行
#resp.getcode--获取状态码,显示200为成功连接

urlretrieve函数:

这个函数可以方便的将网页上的一个文件保存到本地。
例如:

#保存网页
from urllib import request

url = "https://www.sogou.com/"
request.urlretrieve(url, 'sougou.html')
#保存图片
from urllib import request

url = "http://img.zcool.cn/community/01fe885a43130ca801206ed333fd16.jpg@3000w_1l_2o_100sh.jpg"
request.urlretrieve(url,'灌篮高手.jpg')

urlencode函数:编码

parse_qs函数:解码

urlencode可以把字典数据转换为URL编码的数据。
parse_qs可以把URL编码的数据转换为字典数据。
例如:

#urlencode编码,parse_qs解码 字典
from urllib import parse

data = {'name':'小明','age':'30','city':'北京'}
qs = parse.urlencode(data)  # urlencode()--括号内的必须为字典
print(qs)
#解码
print(parse.parse_qs(qs))

补充说明:如果不是字典数据,而是字符串数据,可以用quote编码,unquote解码,例如:

#quote编码,unquote解码 字符串
from urllib import parse

data = "我正在学习网络爬虫。"
qs = parse.quote(data)
print(qs)
#解码
print(parse.unquote(qs))

编码、解码的用处:

'''通过搜狗搜索关键字"灌篮高手",
地址栏显示:https://www.sogou.com/web?query=灌篮高手,
但粘贴后进行了自动编码,
地址栏显示:https://www.sogou.com/web?query=%E7%81%8C%E7%AF%AE%E9%AB%98%E6%89%8B。
此时可使用urlencode编码后,将代码带入url中再抓取需要的数据。
'''
from urllib import parse

url_1 = "https://www.sogou.com/web?"
data = {"query":"灌篮高手"}
url_2 = parse.urlencode(data)
url = url_1+url_2
print(url)

urlparse和urlsplit函数:解析url

urlparse和urlsplit几乎一模一样,唯一的区别是:urlparse里有params属性,而urlsplit没有params属性。
例如:

from urllib import parse

url= "https://www.sogou.com/web?query=%E7%81%8C%E7%AF%AE%E9%AB%98%E6%89%8B"
result_urlparse = parse.urlparse(url)
result_urlsplit = parse.urlsplit(url)
print(result_urlparse)
print(result_urlsplit)

#输出:
#ParseResult(scheme='https', netloc='www.sogou.com', path='/web', params='', query='query=%E7%81%8C%E7%AF%AE%E9%AB%98%E6%89%8B', fragment='')
#SplitResult(scheme='https', netloc='www.sogou.com', path='/web', query='query=%E7%81%8C%E7%AF%AE%E9%AB%98%E6%89%8B', fragment='')

request.Request类:网络请求 可以增加请求头

from urllib import request

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"}
url = "https://www.baidu.com/"
rq = request.Request(url,headers=headers)  #网络请求,并添加请求头
resp = request.urlopen(rq)  #打开网页
print(resp.read())

ProxyHandler(代理设置),解决封ip问题

代理原理:在请求目的网站之前,先请求代理服务器,然后让代理服务器去请求目的网站,代理服务器拿到目的网站的数据后,再转发给我们的代码。
例如:

from urllib import request

url = "http://httpbin.org/ip"
#设置代理ip,ProxyHandle()中的数据应是字典格式,且IP后面应加上端口号。
handler = request.ProxyHandler({"http":"118.212.104.182:9999"})
#创建一个opener,并将新的IP传入其中。
opener = request.build_opener(handler)
#使用opener向url发送请求。
resp = opener.open(url)
print(resp.read())

cookie

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的保存与加载(利用http.cookiejar中的MozillaCookieJar实现)

#保存
from urllib import request
from http.cookiejar import MozillaCookieJar

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

cookiejar.save('cookie.txt',ignore_discard=True, ignore_expires=True)
#加载
from urllib import request
from http.cookiejar import MozillaCookieJar

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值