urllib的使用

霸气de小男生 提交于 2020-02-01 18:12:13

urllib的使用

1. response = urllib.request.urlopen(url, [data=None, timeout=...])

  • url: 请求的url
  • data: 请求的data, 如果设置了这个值,那么将变成post请求
  • response返回值:返回值是一个 http.client.HTTPResponse对象,这个对象是一个类文件句柄对象, 有如下方法:
    • read([size]): 读取指定字节大小的数据,默认为读取全部内容
    • readline(): 读取一行
    • readlines(): 一交读取一行,直到读取完所有数据,返回一个列表
    • getcode(): 响应状态码
from urllib import request
response = request.urlopen('http://httpbin.org/get')
# response.read(1024)    # 读取全部
# response.readline()  # 读取一行
# print(type(response))
print(response.readlines())   # 读取多行
print(response.getcode())
[b'{\n', b'  "args": {}, \n', b'  "headers": {\n', b'    "Accept-Encoding": "identity", \n', b'    "Host": "httpbin.org", \n', b'    "User-Agent": "Python-urllib/3.6", \n', b'    "X-Amzn-Trace-Id": "Root=1-5e351708-72df268451f52bfe8d6e281a"\n', b'  }, \n', b'  "origin": "180.137.6.157", \n', b'  "url": "http://httpbin.org/get"\n', b'}\n']
200

2. urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)

可以方便的将网上的文件保存到本地

request.urlretrieve('https://dss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1208538952,1443328523&fm=26&gp=0.jpg', './1.png')
('./1.png', <http.client.HTTPMessage at 0x1ebf1561e48>)

3. urllib.parse.urlencode(): 将字典进行编码; urllib.parse.quote(): 将字符串(汉字)进行编码

url中如果包含了中文,则需要编码,urlencode 可以把字典数据转换为url编码的数据

from urllib import parse
data = {'name': '成'}
qs = parse.urlencode(data)
print(qs)
print(parse.quote('成'))
name=%E6%88%90
%E6%88%90

4. urllib.parse.parse_qs()

将编码后的字符串进行解码

qs = 'name=%E6%88%90'
parse.parse_qs(qs)
{'name': ['成']}

5. urllib.parse.urlparse(url) 和 urlsplit(url)

对url 的各个组成部分进行分割, 两个基本上是一样的, 唯一不同的是urlparse多了一个params属性

url = "https://www.baidu.com/s?name=cheng&wd=python"
print(parse.urlparse(url))
print('*'*30)
print(parse.urlsplit(url))
ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='name=cheng&wd=python', fragment='')
******************************
SplitResult(scheme='https', netloc='www.baidu.com', path='/s', query='name=cheng&wd=python', fragment='')

6. urllib.request.Request 类

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

url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'
}
# 构建 req 对象
req = request.Request(url, headers=headers)   # 没有添加上请求头的话,对方服务器就会识别出你是非法的请求
response = request.urlopen(req)
# response.read().decode()
# 发送 post 请求
def post_lagou():
    data = {
        'user': 'long',
        'hello': '世界你好'
    }
    data = parse.urlencode(data).encode('utf-8')
    print(data)
    url = "http://httpbin.org/post"
    req = request.Request(url, data=data, headers=headers, method='POST')
    response = request.urlopen(req)
    print(response.read().decode('utf-8'))
# post_lagou()


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!