python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器

摘要:
相信你已经摸清了浏览器各种请求的套路也知道了怎么在手机上进行请求和返回数据的抓取那么接下来我们就开始来使用python了代码lu起来那么怎么用python写各种请求呢?今天要给大家介绍的就是Urllib这可是python内置的库有了它我们写代码就轻松了腰也不疼了腿也不酸了头发也不秃了那么怎么使用Urllib呢?这就是request的urlopen主要用法。

相信你已经摸清了

浏览器各种请求的套路

也知道了怎么在手机上进行请求和返回数据的抓取

那么接下来我们就开始来使用 python 了

代码 lu 起来

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第1张

那么

怎么用 python 写各种请求呢?

今天要给大家介绍的就是

Urllib

这可是 python 内置的库

有了它

我们写代码就轻松了

腰也不疼了

腿也不酸了

头发也不秃了

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第2张

那么怎么使用Urllib 呢?

接下来

就是

学习 python 的正确姿势

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第3张

在 Python 这个内置的 Urllib 库中

有这么 4 个模块

request

request模块是我们用的比较多的

就是用它来发起请求

所以我们重点说说这个模块

error

error模块呢,就是当我们在使用 request 模块遇到错了

就可以用它来进行异常处理

parse

parse模块就是用来解析我们的 URL 地址的,比如解析域名地址啦,URL指定的目录等

robotparser

这个用的就比较少了,它就是用来解析网站的 robot.txt

ok

了解了 urllib 之后

我们就用 python 代码来模拟请求吧

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第4张

打开 pycharm

如果你还不太知道 pycharm 这个开发工具怎么玩的话

你可以看看这玩意

PyCharm使用教程:PyCharm常用技巧指南

当然

你喜欢别的编辑器也无所谓

反正我觉得

Pycharm

就是

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第5张

首先我们来模拟请求百度吧

超简单

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'))

我们执行

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第6张

百度把源码返回给我们了

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第7张

request 的 urlopen 方法

可以传入的参数主要有 3 个

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

第一个 url 就是我们请求的链接

比如我们刚刚就请求百度

第二个参数 data

就是专门给我们 post 请求携带参数的

比如我们在登录的时候

可以把用户名密码封装成 data 传过去

在这里的 data 的值我们可以用 byte 的类型传递

第三个参数 timeout 就是设置请求超时时间

如果等好久服务器都没有给我们返回数据

我们就不鸟他了!

这就是request 的 urlopen 主要用法。

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第8张

urlopen 好像不错

但是

如果我们要欺骗服务器说我们是浏览器或者手机请求的呢?

这个时候我们需要添加请求头信息

也就是我们上次说的

request header

那么

这个时候

就该让 request 模块中的 Request 方法出场了

这个 Request 方法的参数多一些

主要的参数

urllib.request.Request(url,data=None,headers={},method=None)

我们除了定义 url 和 data 之外

我们还可以定义请求头信息

urlopen 默认是 Get 请求

当我们传入参数它就为 Post 请求了

而 Request 可以让我们自己定义请求的方式

这样我们就可以使用 Request 来封装我们的请求信息

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第9张

我们来用Request 玩一下吧

我们来模拟登陆「逼乎」吧

https://biihu.cc/

没错

就是那个山寨知乎的网站

与世界分享你的装逼技巧与见解

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第10张

进入网站进行登录

我们来抓一下数据先

通过 Fiddler 可以看到我们的请求参数

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第11张

这密码不加密的

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第12张

然后我们再看看我们的请求头信息

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第13张

好了

知道这些之后我们就可以来模拟登录了

导入 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}

可以看到我们成功登录逼乎了

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第14张

ok

以上就是 Urllib 的常用使用方法了

(完)

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第15张

扫一扫

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第16张

顺手python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器第17张,点个好看

免责声明:文章转载自《python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇公钥、私钥和数字签名(转载)电容计算公式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

函数:Python的乐高积木

函数可以将重复的代码打包起来,再有需要的时候可以不用写代码,直接调用。 一、定义函数 在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。 >>> def MineFunc(): print('调用函数,执行print语句') &g...

Gunicorn-配置详解

在之前的文章中有记录WSGI容器的作用,以及我们知道常见的容器就只有的uWSGI和Gunicorn,在之前的文章中有记录他们的特性及优缺点,在这就不在多做描述。接下来将着重记录一下Gunicorn的一些配置: config -c CONFIG, --config CONFIG Gunicorn配置文件路径,路径形式的字符串格式,如: gunicorn...

python字典实现按照自定义顺序排序

还是对于python字典理解不透彻,试图通过sort来给python的key指定顺序,几经试验,仍然得不到想要的效果,后来一想,python的字典不是本来就无序的么? 老王python的文章里这样写:(链接http://www.cnpythoner.com/post/62.html) 如果把python列表做为一种有序的对象集合类型的话,那python字典...

dubbo心跳机制 (3)

此文已由作者赵计刚授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 二、consumer端心跳机制 //创建ExchangeClient,对第一次服务发现providers路径下的相关url建立长连接 -->getClients(URLurl) -->getSharedClient(URLurl) -->Ex...

python测试开发工具库汇总(转载)

Web UI测试自动化splinter - web UI测试工具,基于selnium封装。 selenium - web UI自动化测试。 mechanize- Python中有状态的程序化Web浏览链接selene - 使用Python + Ajax支持+ PageObjects + Widgets进行简明UI测试 hitch...

python下进行10进制转16进制不带0x并且将16进制转成小端序

前记   python涉及到和硬件互交的部分,一般是需要发送十六进制的帧长的。所以,python这个转换还是经常使用的。笔者在这里遇到了一个问题。就做一个记录吧。 基本方法:  假如你熟悉python的话,这个是非常简单的,就只需要把int类型的数取从第二位开始的数据就行了:如下所述: hex(28)[2:] 测试实例: import sys arr...