python爬虫——基础知识
Python高级——爬虫
专栏收录该内容
3 篇文章0 订阅
订阅专栏
python爬虫——基础知识
一、网页基础知识
二、爬虫的思路
1、HTML文档(超文本)
三、ROBOTS协议
四、浏览器发送HTTP请求的过程
1、http请求过程
2、请求
五、SSL连接错误
六、HTML标签层级结构
七、选择器
八、会话Cookies
九、代理的基本原理
代理:实现IP 伪装,反反爬虫
一、网页基础知识
在编写爬虫程序之前首先要了解一些必要的网页知识
二、爬虫的思路
提取数据来源:
HTML文档
josn 数据
1、HTML文档(超文本)
每一份网页都是一份HTML文档,是一种文本标记语言
由一系列标签组成:(如图)
我们要爬取的内容大部分都是便签里的 .text文本
常规操作
- 1、打开一个网页,即通过了Http协议,对一个资源进行了请求,返还一份HTML文档
- 2、浏览器 进行文档的渲染,形成一个网页
- 3、模拟浏览器,发送一份请求,获取文档,提取需要的数据(爬虫要做的)
通用爬虫、聚焦爬虫工作流程:
三、ROBOTS协议
Robots协议:网站通过Robots协议告诉 搜索引擎 哪些页面可以抓取,那些页面不可以抓取
例如:http://www.tobo.com/tobots.txt(淘宝网的Robots协议文档)
看一下这个协议的内容:
限制百度引擎下的爬虫爬取淘宝网的全部内容
这个是通过反爬虫策略实现的,
对于反爬虫策略,我们也有 反反爬虫策略,搞他!
四、浏览器发送HTTP请求的过程
http 超文本传输协议
https 用SSL层加密的超文本传输协议
浏览器渲染出来的页面 和 爬虫请求的页面并不一样
1、http请求过程
比如:https://www.baidu.com/,用Chrome 浏览器的开发者模式下的Network 监听组件来做下演示,它可以显示访问当前请求网页时发生的所有网络请求和响应。
打开Chrome 浏览器,输入链接https://www.baidu.com/
右击并选择“检查”项,即可打开浏览器的开发者工具,结果如下图所示
第一列Name :请求的名称,一般会将URL 的最后一部分内容当作名称。
第二Status :响应的状态码,这里显示为200 ,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。
第二Status :响应的状态码,这里显示为200 ,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。
第三列Type :请求的文梢类型。这里为document ,代表我们这次请求的是一个HTML 文档,内容就是一些HTML 代码。
第四列Initiator :请求源。用来标记请求是由哪个对象或进程发起的。
第五列Size :从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示from cache 。
第六列Time :发起请求到获取响应所用的总时间。
第七列Waterfall:网络请求的可视化瀑布流。
2、请求
在爬取数据的时候要模拟浏览器请求,那么就要创建一个请求
请求:由客户端向服务端发出,可以分为4 部分内容:请求方法(Request Method )、请求的网址( Request URL )、请求头(Request Headers )、请求体(Request Body )
请求方法(Request Method )
常见的请求方法有两种:GET 和POST 。
在浏览器中直接输入URL 并回车,这便发起了一个GET 请求,请求的参数会直接包含到URL里
例如,在百度中搜索Python ,这就是一个GET 请求,链接为https://www.baidu.corn/s?wd= Python ,其中URL 中问号后面为请求的参数信息,这里参数wd表示要搜寻的关键字。
POST 请求大多在表单提交时发起。比如,对于一个登录表单,输入用户名和密码后,点击“登录”按钮,这通常会发起一个POST请求,其数据通常以表单的形式传输,而不会体现在URL 中。
GET 和POST 请求方法有如下区别
GET 请求中的参数包含在URL 里面,数据可以在URL 中看到,而POST 请求的URL 不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中
GET 请求提交的数据最多只有1024 字节,而POST 方式没有限制。
一般来说,登录时,需要提交用户名和密码,其中包含了敏感信息,使用GET 方式请求的话,密码就会暴露在URL 里面,造成密码泄露,所以这里最好以POST 方式发送。
上传文件时,由于文件内容比较大,也会选用POST 方式。
请求的网址( Request URL )
请求的网址,即统一资惊定位符URL ,它可以唯一确定我们想请求的资源。
请求头(Request Headers )
请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头。
请求头,用来说明服务器要使用的附加信息,比较重要的信息有Cookie 、Referer 、User-Agent 等。下面简要说明一些常用的头信息。
Accept :请求报头域,用于指定客户端可接受哪些类型的信息。
Accept-Language :指定客户端可接受的语言类型。
Accept-Encoding :指定客户端可接受的内容编码。
Host :用于指定请求资源的主机IP 和端口号,其内容为请求URL 的原始服务器或网关的位置。从HTTP 1. l 版本开始,请求必须包含此内容。
Referer :此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
User-Agent :简称UA ,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别为爬虫。
Content-Type :也叫互联网媒体类型(Internet Media Type )或者MIME 类型,在HTTP 协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html 代表HTML 格式,image/gif代表GIF 图片,app lication/json 代表JSON 类型,更多对应关系可以查看此对照表:http://tool.oschina.neνcommons 。
在爬虫中,如果要构造POST 请求,需要使用正确的Content-Type ,并了解各种请求库的各个参数设置时使用的是哪种Content-Type ,不然可能会导致POST 提交后无法正常响应。
Cookie :也常用复数形式Cookies ,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。
例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是Cookies 的功劳。Cookies 里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上Cookies 并将其发送给服务器,服务器通过Cookies 识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容。*
请求体
请求体-般承载的内容是POST 请求中的表单数据,而对于GET 请求,请求体则为空。
五、SSL连接错误
http 超文本传输协议
https 用SSL层加密的超文本传输协议
当我呢执行爬虫传入一个访问请求时可能会遇到:
没有SSL层加密,被浏览器提示不安全
有些网站使用了https,还是会提示不安全,是因为此网站的CA证书是自行签发的,不被CA机构信任
爬取此类站点,要设置忽略证书选项,否则会提示SSL连接错误
六、HTML标签层级结构
在HTML 中,所有标签定义的内容都是节点,它们构成了一个HTML DOM 树。
七、选择器
CSS 选择器会根据不同的节点设置不同的样式规则,来定位节点
更多定位规则可查看:https://www.runoob.com/cssref/css-selectors.html
八、会话Cookies
Cookies的作用和维持
九、代理的基本原理
反反爬虫:
对于爬虫来说,由于爬虫爬取速度过快,在爬取过程中可能遇到同一个IP 访问过于频繁的问题,此时网站就会让我们输入验证码登录或者直接封锁IP ,这样会给爬取带来极大的不便
代理:实现IP 伪装,反反爬虫
使用代理隐藏真实的IP ,让服务器误以为是代理服务器在请求向己。这样在爬取过程中通过不断更换代理,就不会被封锁,可以达到很好的爬取效果