python爬虫 被重定向_第一关:初识爬虫(附练习题)

下面小编就整理了在编程中,比较常用的【初识爬虫】入门到进阶的用法。

1. 初识爬虫

到底什么是爬虫呢?

爬虫,从本质上来说,就是利用一定的规则的程序在网上拿到对我们有价值的数据。

随着机器学习、人工智能技术的发展,数据越来越重要,需要的数据量也越来越大。而我们可以通过爬虫获取海量的数据,所以爬虫是这一切的源头。

在学完爬虫课之后,你可以自己动手写个爬虫,比如:分析北京各地区的房租情况、自动抢火车票、自动抢演唱会门票、一键下载图片、下载音乐助手、采集疫情数据等等。

2. 爬虫四部曲

第1步:获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。

第2步:解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。

第3步:提取数据。爬虫程序再从中提取出我们需要的数据。

第4步:储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。

这就是爬虫的工作原理,无论之后的学习内容怎样变化,其核心都是爬虫原理。

3. 爬虫初体验

学习爬虫接触到的第一个模块是:requests。安装方法是:Windows 电脑里叫命令提示符(cmd),输入 pip install requests 即可;在 Mac 电脑里打开终端软件(terminal),输入pip3 install requests,然后点击enter即可。

bd4fa42aad47ed61cb0a10057523b106.png

这里是 Windows 的安装截图,提示 Successfully 表示安装成功了。

requests 库可以帮我们下载网页源代码、文本、图片,甚至是音频。其实,“下载” 本质上是向服务器发送请求并得到响应。

4. requests.get()方法

import requestsres = requests.get('http://www.baidu.com')print(type(res))# 打印变量res的数据类型# 

打印结果这代表着:res是一个对象,属于 requests.models.Response 类。好,既然已经知道res是一个Response对象了,我们也就可以去了解它的相应属性和方法了。

5. Response 对象的常用属性(代码简写res变量名)

5.1 res.status_code(响应的 HTTP 状态码)

import requestsres = requests.get('http://www.baidu.com')print(res.status_code)# 200

这里的 200 就是响应的状态码,表示请求成功。当请求失败时会有不同的状态码,不同的状态码有不同的含义,常见的状态码如下:

1.1 1xx(消息,例如:100,继续发出请求)

1.2 2xx(请求成功,例如:200,请求成功)

1.3 3xx(重定向,例如:301,永久重定向)

1.4 4xx(客户端错误,例如:404,找不到资源)

1.5 5xx(服务器错误,例如:503,服务器不可用)

这些状态码只需了解即可,不必全都记住,遇到问题时我们再去查询。

5.2 res.text(响应内容的字符串形式)

这个属性可以把Response对象的内容以字符串的形式返回,适用于文字、网页源代码的下载。

import requestsres = requests.get('http://www.baidu.com'                  )print(res.text)
b7ed7add08b28275d2e6252ef1797964.png

可以看到获取到了百度的网页源代码,但是中文乱码了,这需要设置一下 Response 对象的编码,看下一节知识点。

5.3 res.encoding(响应内容的编码)

编码是信息从一种形式或格式转换为另一种形式的过程,常见的编码方式有 ASCIIGB2312、GBKUTF-8 等。如果用和文件编码不同的方式去解码,我们就会得到一些乱码。

import requestsres = requests.get('http://www.baidu.com')res.encoding = 'utf-8'      # 设置res对象的编码print(res.text)
e0ff0e6b554b2e91bfe7265000e61046.png

可以看到我们设置了res对象的编码格式为:utf-8,就解决乱码问题了。那么怎么查看数据编码类型呢?

1. 鼠标右键页面。2. 查看网页源代码。3. 源代码最上面的 meta 标签内的content="text/html;charset=utf-8"。

  #  百度源代码中的meta标签

5.4 res.content(响应内容的二进制形式)

用于图片、音频、视频等二进制内容的获取、下载。

res.text 用于文本内容的获取、下载。

# 引入requests库import requests# 发出请求,并把返回的结果放在变量res中res = requests.get('https://www.baidu.com/img/bd_logo1.png?where=super')# 把Reponse对象的内容以二进制数据的形式返回pic = res.content# 新建了一个文件baidu.jpg,这里的文件没加路径,它会被保存在程序运行的当前目录下。# 图片内容需要以二进制wb读写。这个知识点属于基础语法的。photo = open('baidu.jpg','wb')# 获取pic的二进制内容photo.write(pic)# 关闭文件photo.close()
8b661aeea3a6018d1ffa62ddc17db916.png

百度logo这张图片就下载下来咯。

练习题

同学们,先自觉练习,答案在公众号,公众号回复暗号【答案】即可。

1. requests 获取数据的方法是?

A.requests.fetch()B.requests.http()C.requests.html()D.requests.get()

2. 下载视频用到response对象的哪个方法?

A. response.textB. response.encodingC. response.contentD. response.status_code

3. 当状态码为多少时,表示请求成功?

A. 100B. 200C. 301D. 403

4. 页面编码类型为 utf-8,如果采集的数据乱码,通常该怎么办?

A. 改变页面编码类型为 gb2312B. 设置res.encoding = 'utf-8'C. 设置res.encoding = 'gb2312'

5. 采集网址:http://www.pyfamily.cn/data/test/ 打印数据查看结果。

知识点:res.text 内容以字符串的形式返回。

602197060ac4cc3d0e1baf1afbbd56aa.gif
19b921bdc82e8f796e7bffd79fd65604.png

扫码关注我们,一起学Python

原创不易,点个 “转发” 分享吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值