文档章节

Python3-Requests库入门及爬取实战

猪鼻子插葱
 猪鼻子插葱
发布于 2018/08/17 11:47
字数 1975
阅读 206
收藏 2

实验环境准备

Python环境安装

腾讯云所提供的的镜像中已经包含了 Python 3.5

大部分情况我们只需要单独安装 pip 即可

sudo apt-get update
sudo apt-get install python3 python3-pip -y

requests库的安装

我们使用 pip 软件管理工具安装 requests ,如果你需要其他方法请访问官方网站指导页面。

请执行

pip3 install requests

在了解爬虫之前,我们有必要了解 robots 协议。

·--------------------------------------------------------

*以下部分内容来自维基百科 robots.txt 词条

robots.txt(统一小写)是一种存放于网站根目录下的 ASCII 编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的 URL 是大小写敏感的,所以 robots.txt 的文件名应统一为小写。robots.txt 应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的 robots.txt,或者使用 robots 元数据(Metadata,又称元数据)。

这个协议也不是一个规范,而只是约定俗成的,有些搜索引擎会遵守这一规范,而其他则不然。通常搜索引擎会识别这个元数据,不索引这个页面,以及这个页面的链出页面。

·---------------------------------------------------

在使用爬虫过程中,我们应尽可能的遵循 robots 协议,在非学习交流与为目的的场合严格遵循其规定。

同时,我们在爬取数据的过程中应该注重服务器负载,避免给服务器带来较大压力,很多小众网站服务器工作能力并没有我们想象的那么好,数个并发爬虫就能使服务器宕机。

对于设计企业数据,网站所有者隐私的信息我们应尽可能避免爬取,换位思考,如果你是网站搭建者,你也不希望你的数据被轻松盗用吧。

Robots 协议暂且介绍这么多,现在,点击下一步,让我们进入 Python 爬虫的世界吧

cd ~
python3
  •  

当看到>>>的输入提示符时表示进入成功,请注意确认版本为 3.X 版本

导入requests库

之后的一些内容都在Python命令行中完成

import requests
  •  

定义网址为字符串变量

targetUrl = "http://www.baidu.com"
  •  

现在请跟随示例完成,之后您可以自行爬取其他页面

进行网页爬取

res = requests.get(targetUrl)
  •  

查看返回码

res.status_code
  •  

如果是200那么我们继续,如果不是、、、额、、、再试一次?

查看网页返回的字符集类型

res.encoding
  •  

你会发现得到的结果是 ISO-8859-1 然而百度真的是这样的吗?

尝试输出爬取结果

res.text
  •  

发现了什么?中文乱码,没错,很显然百度用的不是 ISO-8859-1 的字符集

查看爬取内容的二进制数据

res.content
  •  

你觉得是什么? utf-8 !没错,那么让我们继续

自动判断字符集类型

res.apparent_encoding
  •  

那么我们尝试直接更改 res.encoding 一项

更改字符集声明

res.encoding = res.apparent_encoding
  •  

再次尝试输出

res.text

Requests 库入门

  • 从简单的例子开始

  • requests 库提供的方法

    requests.request() 构造一个请求

    requests.request(method, url, **kwargs)

    **kwargs 的含义我们暂且放一放

    requests.get() 获取 HTML 网页,类似于 HTTP 的 GET

    requests.get(url, params=None, **kwargs)

    Response = requests.get(url)

    Response 这里是 requests 返回的一个对象,我们之后会具体讲解

    requests.head() 获取 HTML 网页头信息,类似于 HTTP 的 HEAD

    requests.head(url, **kwargs)

    requests.post() 向 HTML 网页提交 POST 请求,类似于 HTTP 的 POST

    requests.post(url, data=None, json=None, **kwargs)

    requests.put() 向 HTML 网页提交 PUT 请求,类似于 HTTP 的 PUT

    requests.put(url, data=None, **kwargs)

    requests.patch() 向 HTML 网页提交局部修改请求,类似于 HTTP 的 PATCH

    requests.patch(url, data=None, **kwargs)

    requests.delete() 向 HTML 页面提交删除请求,类似于 HTTP 的 DELETE

    requests.delete(url, **kwargs)

Response 返回类型的基本属性

稍安勿躁,在进行下一步实操之前,让我们再了解一下之前我们涉及到的 Response 的部分基本属性

.status_code

HTML 返回的状态码,你可以参考百度百科上的内容了解具体的含义

.text

内容的字符串形式,简而言之,就是网页上的内容

.encoding

从 HTTP header中获得响应内容编码方式,如果在 header 里没有声明,那么将会是 ISO-8859-1

.apparent_encoding

从内容中分析出的响应内容编码方式,在执行过程中会对各种编码的概率进行计算,给出最可能的编码类型,注意在程序中使用它会导致程序速度变慢。

.content

html 内容的二进制显示,对于图片这样的非文本文件,二进制的输出是必要的

raise_for_status()

这是我们上一个程序示例中没有出现的内容,但它很重要

如果不是 200,产生异常

网络传输存在着不确定性,发现并及时处理异常非常重要

重新打开 Python 命令行

cd ~
python3
  •  

导入 requests 库,这次我们爬取一个不存在的页面

targetUrl = "https://cloud.tencent.com/dsadfas"
res = requests.get(targetUrl)
res.raise_for_status()
  •  

不出意外的话你就能看到 Python 的报错信息

值得我们注意的是这里是产生中断的报错,而不是一个警告,通过 try...except... 我们可以实现对 http 请求错误的处理。

问题分析与处理

如果你对html请求熟悉,那么一定知道 user-agent 这玩意儿,它标识了访问者浏览器的类型,Python 很诚实的告诉网站服务器它是一个 Python 程序,然而如果我们希望获得其中的内容就需要更改这个 user-agent

在之前基础上这么尝试:

h = {
    "user-agent":"Mozilla/5.0 (MSIE 10.0; Windows NT 6.1; Trident/5.0)"
}
#这里用的是IE的user-agent
res = requests.get(url,headers = h)
print(res.status_code)

小结

http 请求 headers 中包含的信息并不只有 user-agent,很多网站都有反爬的基本策略,有的检查 user-agent,类似于我们之前看到的亚马逊,有的网站会检查 host,refer 等字段,这些内容是否需要确定,如何更改相信有了之前的例子你已经懂了,关于更多这部分的内容不属于本教程的范畴,请自行查阅相关资料。

headers 作为参数传递给 requests 库时,应该使用字典格式,把需要的内容放到字典中,剩下的 requests 会帮你解决。

更多参数

和之前出现过的 headers 类似,还有一些参数是我们所需要的这里给出简要,具体使用请自行尝试。

params : 字典或字节序列,作为参数增加到 url 中

data : 字典、字节序列或文件对象,作为 Request 的内容

json : JSON 格式的数据,作为 Request 的内容

headers : 字典,HTTP 定制头

cookies : 字典或 CookieJar, Request 中的 cookie

auth : 元组,支持 HTTP 认证功能

files : 字典类型,传输文件

timeout : 设定超时时间,秒为单位

proxies : 字典类型,设定访问代理服务器,可以增加登录认证

allow_redirects : True/False,默认为 True,重定向开关

stream : True/False, 默认为 True, 获取内容立即下载开关

verify : True/False, 默认为 True, 认证 SSL 证书开关

cert : 本地 SSL 证书路径

*以上内容来源网络

 

 

 

© 著作权归作者所有

猪鼻子插葱
粉丝 1
博文 44
码字总数 172746
作品 0
崇明
高级程序员
私信 提问
2个月精通Python爬虫——3大爬虫框架+6场实战+分布式爬虫,包教包会

阿里云大学在线工作坊上线,原理精讲+实操演练,让你真正掌握云计算、大数据技能。 在第一批上线的课程中,有一个Python爬虫的课程,畅销书《精通Python网络爬虫》作者韦玮,带你两个月从入门...

云木西
2018/06/27
0
0
实战(一)之使用自带urllib和re正则表达式获取电影详情页链接

一、关于urllib库 网上urllib库的教程文章非常多而且详细具体,我就不过多叙述和重复了,个人更加倾向于将精力放在实战上,而不是反反复复拷贝教程(其实是因为我懒),来几篇干货参考。 py...

歪文
2018/10/29
0
0
分享我自己写的一套Python爬虫学习经验

最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多。学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴...

崔庆才
2015/02/23
4K
25
python爬虫实战,干翻一个网站,爬取资源链接并用多线程下载!

其实说是这样说,不过我觉得如果不是有什么特殊用处就不要去下载了,毕竟一个视频就占那么大的内存,爬好链接地址就可以了。当然如果你是要爬那种网站,那么下载一点点备用我也能够理解。 需...

Python新世界
2018/07/30
0
0
福利 | Python专场竞技,这些书给你加把力!

端午节将至,各地龙舟备战竞技,粽子部队也整装待发。小编掐指一算,这种热闹的时节,是时候展现真正的技(fu)术(li)了! (“Python号”龙舟闪亮登场!) Python作为当下最流行的编程语言...

2018/06/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

技术分享 | MySQL 8.0:字符集从 utf8 转换成 utf8mb4

作者:胡呈清 整理 MySQL 8.0 文档时发现一个变更:默认字符集由 latin1 变为 utf8mb4。想起以前整理过字符集转换文档,升级到 MySQL 8.0 后大概率会有字符集转换的需求,在此正好分享一下。...

爱可生
15分钟前
2
0
不管单机还是集群的限流实现已经给你准备好了

限流算法 计数器算法 维护一个counter,规定在单位时间内counter的大小不能超过最大值,每隔固定时间就将counter的值置零。如果这个counter大于设定的阈值,那么系统就拒绝请求 漏桶算法 维护...

阿提说说
27分钟前
3
0
文件管理

通过CLI登录进行文件管理 .表示当前目录,..表示父目录,具有隐藏文件。支持缩写与TAB键补全 1、目录操作 pwd#打印工作目录 cd <directory>#改变工作目录 dir [/all][<directory>]#查看目录内...

悠悠子佩
29分钟前
3
0
Netty学习笔记(10)——Netty中的Channel组件

1. Channel的功能 1. 与NIO中的Channel一样,它实现了网络操作的抽象类,聚合了一系列的网络IO功能,包括读写数据、建立连接、关闭连接等功能。通过外观模式,将数据读写、连接建立与断开等操...

江左煤郎
33分钟前
2
0
二叉树的深度

从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 public int TreeDepth(TreeNode root) { return root == null ? 0 : 1 + Math.max(Tree...

Garphy
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部