python -爬虫学习2:获取数据requests 库

上一篇介绍的主要是爬虫的工作原理,大致分为四个步骤:获取数据   解析数据    提取数据   存储数据 。这一篇主要就从获取数据介绍起。

获取数据

1.requests 库下载安装

  MAC :电脑打开终端软件,输入pip3 install requests

  winds:打开命令提示符(windows +r 快捷键,输入cmd),输入pip install requests

      requests 库可以帮助下载网页源代码,文本,图片,音频~

   下载就是说向服务器发送请求并得到回应

2.requests 方法介绍

reuqests.get()方法

 

import requests    #引入requests 库
res = requests.get('URL') # requests.get 是在调用requests库中的get() 方法,然后向服务器发送请求,括号里的参数是你需要的数据的网址,服务会对请求作出响应,返回一个response对象, 然后存储到变量res里

重点看一下注释。

python 语法里有个方法type,不了解的童鞋请自行百度,通过type()方法可以得到数据类型

 

import requests

res = requests.get('URL')

print(type(res))

终端显示:requests.models.Response

这代表着:res 是一个对象,属于requests.models.Response类。

3.requests 对象的常用属性

    

 

  • response.status_code  

    拿百度(https://www.baidu.com/)为例

    

import requests
res = requests.get('https://www.baidu.com/')
print(res.status_code) #打印res 的响应状态码,检查请求是否成功

  终端运行的结果显示:200   

  200 :代表服务器同意请求,然后返回了数据给我们

  除了200之外,还有其他的状态码,具体可以参考下图:遇到时候可以查表,不一样要都记住,还想要再具体一点的状态码解释的童鞋请自行百度~

    注意!!!res 是我随机定义的变量名,可以根据自己需要随便去定义,但是要符合变量的命名规则

 

response.status_code 的格式
print
(变量.status_code) #检查请求是否正确响应,如果响应状态码是200,则请求成功
  • response.content

    response.content 是把reponse 对象的内容以二进制数据的形式返回,适用于图片,音频,视频的下载。(需要注意的是它的下载范围)  

    右键复制图片的url:  https://www.baidu.com/img/sjdhdong_2f0815641b0fb86e10289d06a632f3f1.gif

import requests  #引入requests 库
res = requests.get(' https://www.baidu.com/img/sjdhdong_2f0815641b0fb86e10289d06a632f3f1.gif') #发出请求,并且把返回的结果放在变量res里
pic = res.content # 把response 对象的内容以二进制数据格式的形式返回
p =open('ppt.gif','wb') #没加路径,会在当前程序运行的目录下新建一个ppt.gif 的文件, 图片内容需要以二进制wb读写。需要修改存放位置的话就是在ppt.gif 名字前加上路径,D:\sougo\ppt.gif  那就会在相应的目录下生成这个文件
p.write(pic) #把pic 写入到p 文件里
p.close() #关闭文件,释放资源

      终端输出:

 

 

  • response.text

    把response 对象的内容以字符串的形式返回,适用于文字,网页源代码的下载

    举例:下载小说《三国演义》的第一章   文章url:https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md

import requests
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
novel =res.text #把response 对象的内容以字符串的形式返回
print(novel[:800])#打印小说前800字,涉及到列表的用法,陌生的话参考一下python 列表部分的知识

    打印全部内容然后存储在文件里

import requests
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
novel =res.text
t =open('《三国演义》.txt','a+',encoding='utf-8') #创建一个《三国演义》的txt 文档,然后在文件末追加内容,我这里新加了encoding='utf-8',是因为打印出来内容是乱码,所以规定了编码方式为utf-8
t.write(novel) #把获取到的文件写入t 文件夹里
t.close()

    同提取图片的链接类似,会在同级目录下生成一个《三国演义》的txt 文件,如果需要更改存储位置就增加路径。

  • response.encoding

    在打印三国演义的例子里已经用到了,实际还有另一种写法

import requests
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
res.encoding = 'gbk'
novel =res.text
print(novel[:800])

    但是输出结果是一串乱码,原因是我定义的编码方式是gbk,大多数网页的编码方式都是utf-8,但是我定义成gbk 之后,它就不会按照utf-8来编码。所以如果出现乱码格式的话,优先检查一下编码格式。

    所以上述的代码如果要正常显示文字格式的话,就是res.encoding='utf-8'

import requests
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
res.encoding = 'utf-8'
novel =res.text
print(novel[:800])

    到这里,requests 获取数据的过程就结束了。

爬虫伦理Robots 协议

通常情况下,服务器不太会在意小爬虫,但是,服务器会拒绝频率很高的大型爬虫和恶意爬虫,因为这会给服务器带来极大的压力或伤害。 

 

posted @ 2020-09-15 16:32  胖虎大人v  阅读(640)  评论(0)    收藏  举报