urllib库基本使用

简介

urllib 是一个收集几个模块以处理URL的包:

  • urllib.request 用于打开和读取URL
  • urllib.error 包含由 urllib.request产生的异常
  • urllib.parse 用于解析URL
  • urllib.robotparser用于解析robots.txt文件

简单使用

  • urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
    获取url
  • urllib.request.urlretrieve(url,filename = None,reporthook = None,data = None )
    下载文件
#使用示例
from urllib import request
url = 'http://www.baidu.com' 
filename = 'baidu.html' #下载后保存的文件名
resp = request.urlopen(url)  #获取url
print(resp.read())  #查看url响应
print(resp.getcode()) # 获取状态码
request.urlretrieve(url,filename)  #下载文件

urlencode()和parse_qs()

  • urlencode()
    用浏览器发送请求的时候,如果url包含中文或者特殊字符,浏览器会自动编码,如果使用代码发送请求,就必须手动进行编码,这时候就应该使用urlencode函数编码,可以把字典数据转换成url编码的数据
  • parse_qs()
    与urlencode()相反,可以吧编码的内容解码回字典形式
from urllib import parse
data = {'name':'爬虫','greet':'hello world','age':100}
url='https://www.baidu.com/s'
params = {"wd":"卷福"}
qs = parse.urlencode(params)  #编码
url=url+'?'+qs
print('字典:',params)
print("编码:",qs)
print("完整URL:",url)
qs = parse.parse_qs(qs) #还原编码内容
print("还原:",qs)

在这里插入图片描述

urlparse()和urlsplit()

对url各个部分进行分割,区别在于urlsplit()没有params这一项

from urllib import request
url = 'http://www.baidu.com/s;hello_parms?wd=卷福&username=abc#1'
result = request.urlsplit(url)
print(result)
print('Scheme:',result.scheme)
print('Netloc:',result.netloc)
print('Path:',result.path)
print('Query:',result.query)
print('Fragment:',result.fragment)

result = request.urlparse(url)
print(result)
print('Scheme:',result.scheme)
print('Netloc:',result.netloc)
print('Path:',result.path)
print('Params:',result.params)    #区别:urlsplit()没有params这一项
print('Query:',result.query)
print('Fragment:',result.fragment)

在这里插入图片描述

request类常见用法

  • class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)¶
from urllib import request,parse
url='https://www.lagou.com/jobs/positionAjax.json?city=%E6%B7%B1%E5%9C%B3&needAddtionalResult=false'
headers = {  #设置报文首部,可以通过浏览器抓包得到
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
    'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
}
data = {  #POST方法的内容,可以通过浏览器抓包得到
    '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'))

设置代理

  • class urllib.request.ProxyHandler(proxies=None)

常用的免费代理

from urllib import request
url='http://httpbin.org/ip'   #http://httpbin.org/ip 用于判断请求的ip是否发生变化

#1.使用ProxyHandler,传入代理构建一个handler
handler=request.ProxyHandler({"http":"119.145.2.99:44129"})  #字典键表示代理支持的请求方式,值为代理的ip。
#2.构建opener
opener = request.build_opener(handler)
#3.使用opener发送请求
resp = opener.open(url)
print(resp.read())

官方文档 https://docs.python.org/3/library/urllib.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值