收到粉丝私信说 urllib 库的教程还没写, 好吧, urllib 是 python 自带的库, 没 requests 用着方便. 本来嘛, python 之禅 (import this 自己看) 就说过, 精简, 效率, 方便也是大家的追求. 不过大家有要求, 那就写一篇关于 urllib 的基础教程.
***
本文中的知识点:
get 请求
使用代理
post 请求
安装
urllib 是 python 自带的, 不用安装, 直接 import 进来即可
代码样例
注意这里需要先定义 opener, 在打开我们要发送的 request 请求. 返回的字符串编码用 utf-8 处理
- import urllib.request
- from urllib.parse import urlencode
- opener = urllib.request.build_opener()
- # 发送 request 请求
- req = urllib.request.Request('https://www.baidu.com/')
- res = opener.open(req)
- # 打印 response code
- print(res.status)
- # urllib 字符串默认是 bytes 类型, 需要转换到 utf-8
- print(res.read().decode('utf-8'))
运行下, 结果如下图
使用代理
注意还是要模拟用户请求, 加上 header 参数
- import urllib.request
- from urllib.parse import urlencode
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ApplewebKit/537.36 (Khtml, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
- }
- # 代理 IP, 由快代理提供
- proxy = '124.94.203.122:20993'
- proxy_values = "%(ip)s" % {
- 'ip': proxy
- }
- proxies = {
- "http": proxy_values, "https": proxy_values
- }
- # 设置代理
- handler = urllib.request.ProxyHandler(proxies)
- opener = urllib.request.build_opener(handler)
- # 发送 request 请求
- req = urllib.request.Request('https://www.baidu.com/s?ie=UTF-8&wd=ip', headers=headers)
- res = opener.open(req)
- # 打印 response code
- print(res.status)
- # urllib 字符串默认是 bytes 类型, 需要转换到 utf-8
- print(res.read().decode('utf-8'))
运行下, 结果如下. 正常打开了这个网页
***
POST 请求
上述的默认使用的是 get 请求, 那要使用 post 加一个 method 参数即可.
注意 method 参数 POST 是大写, 因为我的 urllib 源码提示得大写. 不过有的同学小写也可以, 大家可以自己试下.
- import urllib.request
- from urllib.parse import urlencode
- page_url = 'https://dev.kdlapi.com/testproxy/'
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
- }
- # 代理 IP, 由快代理提供
- proxy = '115.203.13.59:21216'
- proxy_values = "%(ip)s" % {
- 'ip': proxy
- }
- proxies = {
- "http": proxy_values, "https": proxy_values
- }
- # 设置代理
- handler = urllib.request.ProxyHandler(proxies)
- opener = urllib.request.build_opener(handler)
- # 发送 request post 请求
- data = bytes(urlencode({
- "info": "send post request"
- }), encoding="utf-8")
- req = urllib.request.Request(url=page_url, headers=headers, data=data, method="POST")
- res = opener.open(req)
- # 打印 response code
- print(res.status)
- # urllib 字符串默认是 bytes 类型, 需要转换到 utf-8
- print(res.read().decode('utf-8'))
运行下试试, post 成功, 如图
进阶学习:
urllib 库, 自己看下帮助文档或者源码吧...(滑稽)
代理 IP 的使用
来源: http://www.bubuko.com/infodetail-3382005.html