爬虫
什么是爬虫
爬虫所依赖的知识基础
1、网络协议基础:http/https、HTML页面基本知识
2、如何发起请求:通过代码发起请求并获取相应,然后解析内容。知识点如Python、Json、RegExp、BeautifulSoup
、xpath
3、保存数据:数据库操作、文件操作
爬虫的两大难点
1、如何破解反爬措施:JS反爬、验证码反爬
2、如何高效大规模爬取:分布式、高并发
HTTP协议基础
特点:请求-相应式协议
一次完整的HTTP请求过程
1、建立TCP连接。
2、浏览器向服务器发送请求命令(GET/POST)。
3、浏览器发送请求头信息,如‘UserAgent,host’等关于自身的信息,最后发送一个空请求头代表请求头信息发送完毕,如果POST提交,就会继续提交请求体。
4、服务器应答
5、服务器发送应答头信息,关于自己的信息及被请求的文档,最后发送一个空白行表示头信息发送结束。
6、服务器向浏览器发送数据,以‘Content-Type’应答头信息所描述的格式,发送用户所请求的实际数据。
7、服务器关闭TCP连接。(如果添加Connection:keep-alive则TCP连接在发送后仍将保持打开状态,避免每一次都重新创建TCP连接)
GET和POST请求的区别是什么
GET请求一般用于向服务器请求一个资源,没有副作用,一般会在客户端做缓存。POST请求一般用于向服务器段提交数据并让服务器完成一件事,有副作用,不会再客户端做缓存。
GET请求发送数据的时候,一般会将请求数据放在url中发给服务器,从安全性角度来看相对没有POST请求安全性高,所以GET请求一般不会用于比较隐私的数据传输,而POST请求时将请求数据放在请求体里面。
常见HTTP代码
1**:临时相应并需要请求者继续执行操作
2**:请求成功 OK
3**:重定向代码
4**:客户端错误,请求包含语法错误或者无法完成请求
5**:服务器错误,服务器在请求的过程中发生错误
Cookie和Session的作用:
HTTP协议是一个无状态协议,这两者都是为了让服务器来记住客户端
两者区别:Cookie保存在客户端,而Session是保存在服务器端
Cookie一般保存不敏感信息
Chrome抓包分析
最简单的抓包方式:右键->检查
其中
Element:网页的元素,用于定位页面元素
Console:运行一些命令行,相当于在页面上运行JS代码
Sources:JS逆向,破解时使用
Network:抓包,会显示所有请求的地址、信息等等
Request库
导入使用:
1 | import request |
get请求使用:
1 | resp = request.get('www.xxxx.com') |
其中,构造请求头使用:
1 | headers = {'User-Agent' : 'Mozilla/5.0.....'} |
POST请求使用
1 | data = {'key1' : 'value1', 'key2' : 'value2'} |
POST请求也可以添加UA,与前面一样
Cookie嵌入使用:
1 | headers = {'Cookie' : 'xxx'} |
如何利用requests保持Session会话:
1 | sess = requests.Session() |
正则表达式
用于搜索或查找特定数据的语法格式,由一堆符号组成
正则表达式简单使用
|:管道符号
.:匹配除去\n之外的任何字符
^:匹配字符串其实部分
$:匹配字符串中之字符
如何在python中使用正则
所有要抓取的内容在正则表达式中用括号括起来
1 | import re |
输出:[(‘2020-04-15’, ‘STU001’, ‘nok’)]
贪婪模式和非贪婪模式
贪婪模式尽可能多的匹配正则前面的符号,如
1 | import re |
输出:[‘’6’]
非贪婪模式,如下:
1 | import re |
输出:[‘123456’]
.*?的用法
将想要匹配的值全部换成.*?即可
re.S的用法
拿取换行符,如下:
1 | import re |
输出:[‘111.htm’, ‘222.htm’]