urllib库的基本使用

urllib库的基本使用

1、urlopen函数

eg: 
     from urllib import request
     resp = request.urlopen('http://www.baidu.com')
     print(resp.read())

注:创建一个表示远程url的类文件对象,然后像操作本地文件一样操作这个类文件对象来获取远程数据。
      request.urlopen(url,data)
      url:请求的url。
      data:请求的data,如果设置了这个值,那么将变成post请求。
      返回值:返回值是一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象。
                   有read(size)、readline、readlines以及getcode等方法。

2、urlretrieve函数

eg: 
      from urllib import request
      request.urlretrieve('http://www.baidu.com/','baidu.html')

 注:这个函数可以方便将网页上的一个文件保存到本地。
        request.urlretrieve(url,带后缀的文件名)

3、urlencode函数/字典编码
urlencode可以把字典数据转换为URL编码的数据。

eg: 
      from urllib import parse
      data = {'name':'爬虫基础','greet':'hello world','age':100}
      qs = parse.urlencode(data)
      print(qs)

补充:
 1、  字符串编码
         a='石原里美'
         b=parse.quote(a)
         print(b)
 2、quote()函数
     eg: 
     from urllib.parse import quote
     quote()函数,可以帮我们把内容转为标准的url格式,作为网址的一部分打开

4、parse_qs函数:
可以将经过编码后的url参数进行解码。

eg: 
       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))
     # {'name': ['老王'], 'age': ['18'], 'greet': ['hello world']}

补充:
url解码
eg:from urllib import parse
        url='xxxxxxxxxx'
        print(parse.unquote(url))

5、urlparse和urlsplit函数:解析url
urlparse和urlsplit基本上是一模一样的。
唯一不一样的地方是:
urlparse里有params属性,而urlsplit没有这个params属性。

 eg:
 from urllib import parse
 url = 'http://www.baidu.com/index.html;user?id=S#comment'
 result = parse.urlparse(url)
# result = parse.urlsplit(url)
 print(result)
 print(result.scheme)
 print(result.netloc)
 print(result.path)       #urlparse里有params属性,而urlsplit没有这个params属性。
 print(result.params)

6、request.Request类
如果想要在请求的时候增加一些请求头,那么就必须使用request.Request类来实现。
比如要增加一个User-Agent

 eg:  
from urllib import request
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)  
    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 
   Safari/537.36'
                }
rq = request.Request('https://www.baidu.com/',headers=headers)
resp = request.urlopen(rq)
print(resp.read())

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

 eg:
 from urllib import request
 # 没有使用代理
 # url = 'http://httpbin.org/ip'
 # resp = request.urlopen(url)
 # print(resp.read())
 # 使用代理
 # 步骤
 url = 'http://httpbin.org/ip'
#1. 使用ProxyHandler,传入代理构建一个handler
handler = request.ProxyHandler({'http':'122.193.244.243:9999'})
#2. 使用上面创建的handler构建一个opener
opener = request.build_opener(handler)
#3. 使用opener去发送一个请求
resp = opener.open(url)
print(resp.read())

8、cookie
1. 什么是cookie:指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据
2. 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协议下起作用。

实例1
from urllib import request
from urllib import parse
from http.cookiejar import  CookieJar

# 登录:https://i.meishi.cc/login.php?redirect=https%3A%2F%2Fwww.meishij.net%2F
#个人网页https://i.meishi.cc/cook.php?id=13686422

headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}

#1.登录
#1.1 创建cookiejar对象
cookiejar = CookieJar()
#1.2 使用cookiejar创建一个HTTPCookieProcess对象
handler = request.HTTPCookieProcessor(cookiejar)
#1.3 使用上一步的创建的handler创建一个opener
opener = request.build_opener(handler)
#1.4 使用opener发送登录请求  (账号和密码)

post_url = 'https://i.meishi.cc/login.php?redirect=https%3A%2F%2Fwww.meishij.net%2F'
post_data = parse.urlencode({
    'username':'1097566154@qq.com',
    'password':'wq15290884759.'
})
req = request.Request(post_url,data=post_data.encode('utf-8'))
opener.open(req)


#2.访问个人网页
url = 'https://i.meishi.cc/cook.php?id=13686422'
rq = request.Request(url,headers=headers)
resp = opener.open(rq)
print(resp.read().decode('utf-8'))

实例2:保存和加载
from urllib import request
from http.cookiejar import MozillaCookieJar

# 保存
# cookiejar = MozillaCookieJar('cookie.txt')
# handler = request.HTTPCookieProcessor(cookiejar)
# opener = request.build_opener(handler)
# resp = opener.open('http://www.httpbin.org/cookies/set/course/abc')
#
# cookiejar.save(ignore_discard=True,ignore_expires=True)

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

#加载

cookiejar = MozillaCookieJar('cookie.txt')
cookiejar.load()
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)
resp = opener.open('http://www.httpbin.org/cookies/set/course/abc')

for cookie in cookiejar:
    print(cookie)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值