![f902564105eebf186fe493ba33a15cd3.png](https://img-blog.csdnimg.cn/img_convert/f902564105eebf186fe493ba33a15cd3.png)
相信你已经摸清了
浏览器各种请求的套路
也知道了怎么在手机上进行请求和返回数据的抓取
那么接下来我们就开始来使用 python 了
代码 lu 起来
那么
怎么用 python 写各种请求呢?
今天要给大家介绍的就是
Urllib
这可是 python 内置的库
有了它
我们写代码就轻松了
腰也不疼了
腿也不酸了
头发也不秃了
![b25c3ffe72bcc117b28382923e619f6d.png](https://img-blog.csdnimg.cn/img_convert/b25c3ffe72bcc117b28382923e619f6d.png)
那么怎么使用 **Urllib **呢?
恩
接下来
就是
学习 python 的正确姿势
在 Python 这个内置的 Urllib 库中
有这么 4 个模块
request
request模块是我们用的比较多的
就是用它来发起请求
所以我们重点说说这个模块
error
error模块呢,就是当我们在使用 request 模块遇到错了
就可以用它来进行异常处理
parse
parse模块就是用来解析我们的 URL 地址的,比如解析域名地址啦,URL指定的目录等
robotparser
这个用的就比较少了,它就是用来解析网站的 robot.txt
ok
了解了 urllib 之后
我们就用 python 代码来模拟请求吧
![2561455cec47d6fab7287fe8e7a39b82.png](https://img-blog.csdnimg.cn/img_convert/2561455cec47d6fab7287fe8e7a39b82.png)
打开 pycharm
如果你还不太知道 pycharm 这个开发工具怎么玩的话
你可以看看这玩意
PyCharm使用教程:PyCharm常用技巧指南
当然
你喜欢别的编辑器也无所谓
反正我觉得
Pycharm
就是
![2f0570445e18700cc744ed78c4140650.png](https://img-blog.csdnimg.cn/img_convert/2f0570445e18700cc744ed78c4140650.png)
首先我们来模拟请求百度吧
超简单
request 模块中的 urlopen 方法
首先我们导入 urllib 的请求模块
import urllib.request
我们在浏览器访问百度的时候
对于 python 来说
就是一句代码的事情
urllib.request.urlopen('http://www.baidu.com')
看
我们通过 request 模块的 urlopen 方法
直接用 Get 请求方式请求百度了
那么返回的内容就是和浏览器一样的
我们可以打印出来
response = urllib.request.urlopen('http://www.baidu.com')
print(response.read().decode('utf-8'))
我们执行
![c8f4544bfced7f3f33974f92c3818019.png](https://img-blog.csdnimg.cn/img_convert/c8f4544bfced7f3f33974f92c3818019.png)
百度把源码返回给我们了
![634c2ff5bfa74bb8093f7d51e74c0602.png](https://img-blog.csdnimg.cn/img_convert/634c2ff5bfa74bb8093f7d51e74c0602.png)
request 的 urlopen 方法
可以传入的参数主要有 3 个
urllib.request.urlopen(url, data=None, [timeout, ]*)
第一个 **url **就是我们请求的链接
比如我们刚刚就请求百度
第二个参数 data
就是专门给我们 post 请求携带参数的
比如我们在登录的时候
可以把用户名密码封装成 data 传过去
在这里的 data 的值我们可以用 byte 的类型传递
第三个参数 **timeout **就是设置请求超时时间
如果等好久服务器都没有给我们返回数据
我们就不鸟他了!
这就是 request 的 urlopen 主要用法。
![d17d33fd410c286fc8300a485135b1dd.png](https://img-blog.csdnimg.cn/img_convert/d17d33fd410c286fc8300a485135b1dd.png)
urlopen 好像不错
但是
如果我们要欺骗服务器说我们是浏览器或者手机请求的呢?
这个时候我们需要添加请求头信息
也就是我们上次说的
request header
那么
这个时候
就该让 request 模块中的 Request 方法出场了
这个 Request 方法的参数多一些
主要的参数
urllib.request.Request(url, data=None, headers={}, method=None)
我们除了定义 url 和 data 之外
我们还可以定义请求头信息
urlopen 默认是 Get 请求
当我们传入参数它就为 Post 请求了
而 Request 可以让我们自己定义请求的方式
这样我们就可以使用 Request 来封装我们的请求信息
![2e78f89795e5c5795fd4f95c4f6e39a2.png](https://img-blog.csdnimg.cn/img_convert/2e78f89795e5c5795fd4f95c4f6e39a2.png)
我们来用 Request 玩一下吧
我们来模拟登陆「逼乎」吧
https://biihu.cc/
没错
就是那个山寨知乎的网站
与世界分享你的装逼技巧与见解
![e2bbb73003266875d3fe72c960467528.png](https://img-blog.csdnimg.cn/img_convert/e2bbb73003266875d3fe72c960467528.png)
进入网站进行登录
我们来抓一下数据先
通过 Fiddler 可以看到我们的请求参数
![955e2b8d5222dc09eb3107304678a677.png](https://img-blog.csdnimg.cn/img_convert/955e2b8d5222dc09eb3107304678a677.png)
这密码不加密的
![e23974be13a2bde537c4682166b7f9c9.png](https://img-blog.csdnimg.cn/img_convert/e23974be13a2bde537c4682166b7f9c9.png)
然后我们再看看我们的请求头信息
![d9c2bddba6e474215bb2c3d303423d00.png](https://img-blog.csdnimg.cn/img_convert/d9c2bddba6e474215bb2c3d303423d00.png)
好了
知道这些之后我们就可以来模拟登录了
导入 urllib
from urllib import request,parse
import ssl
在这里我们还要导入 ssl
因为逼乎这个b用的是 https
我们可以使用 ssl 未经验证的上下文
context = ssl._create_unverified_context()
接着定义一下我们的请求 url 和 header
url = 'https://biihu.cc//account/ajax/login_process/'
headers = {
假装自己是浏览器
'User-Agent':' Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
再定义一下我们的请求参数
dict = {
'return_url':'https://biihu.cc/',
'user_name':'xiaoshuaib@gmail.com',
'password':'123456789',
'_post_type':'ajax',
}
我们把请求的参数转化为 byte
data = bytes(parse.urlencode(dict),'utf-8')
然后我们就可以封装 request 了
req = request.Request(url,data=data,headers=headers,method='POST')
最后我们进行请求
response = request.urlopen(req,context=context)
print(response.read().decode('utf-8'))
ok
这样我们就模拟登录了
运行一下看看
{"rsm":{"url":"https://biihu.cc/home/first_login-TRUE"},"errno":1,"err":null}
可以看到我们成功登录逼乎了
![d3ca548c951ed736f371d7b4cbda8e02.png](https://img-blog.csdnimg.cn/img_convert/d3ca548c951ed736f371d7b4cbda8e02.png)
ok
以上就是 Urllib 的常用使用方法了
(完)
python长路漫漫,正在路上奔跑的小伙伴可以关注我们哦~
![b7e657aa4976dee1cd6c33a4352b2177.png](https://img-blog.csdnimg.cn/img_convert/b7e657aa4976dee1cd6c33a4352b2177.png)