目录
爬虫的前导知识
端口
每一个应用程序都有自己独立的标识 这个标识我们称之为端口
mysql 3306
mongodb 27017
通讯协议
TCP/IP 国际组织定义的通用的通信协议
HTTP 超文本传输协议 通讯协议 80 html 超文本标记语言 超文本(网页源代码html)
网络模型
https = http + ssl 是以安全为目标的http通道 443
- http的安全版本 ssl是用于web的安全传输协议
- http和ssl是在应用层的
抓包工具
Elements 元素 网页源代码 用来提取和分析数据的 可以用来分析页面结构 分析数据
Console 控制台 后期分析js代码的时候 可以通过打印来找规律 前期用不着
Sources 资源 信息的来源 整个网站加载的资源 分析js代码的时候使用 进行调试 前期用不着
network(很重要) 网络工作(数据抓包) 服务器和客户端的交互记录都在network里面,客户端发起请求以及服务器返回响应在network里面都是可以找得到的
HTTP的请求和响应
Request URL 请求的地址
Request Method 请求的方式(get post 一般我们看到的是啥请求方式就用啥请求方式 但有时也要具体情况具体分析)
Status Code 状态码
静态加载的页面 数据都在网页源码中
动态加载的页面 Requests URL(目标url)是需要去network中分析数据包才能找到的 response看响应的结果
Request Headers(重点)
headers请求头 = {
请求方式 目标url (不加)
Host: www.baidu.com 域名 (可加可不加)
Connection: keep-alive 长连接 (不加)
User-Agent: 用户代理(操作系统、浏览器和浏览器版本号) 一般是反反爬的第一步 (加)
Accept-Encoding: gzip, deflate (不加 加了数据可能会出现问题)
Cookie:xxx 记录 用户信息,用于爬取登陆后才能访问的网站 (加不加看情况) 一般有时间限制
Referer:xxx 页面跳转 记录了当前页面是由哪个页面(url)过来的,可以用于反反爬(加不加看情况)
}
Query String Parameters
有url中的所有参数
爬虫的四个基本步骤
解析网页(确定数据在哪个网页)
发送请求
解析数据
保存数据
requests模块的运用
urllib vs requests
- requests不需要处理中文
- requests不需要拼接url地址
- requests直接用get方式就可以传递headers
渲染
服务器端渲染:
能够在网页源码中看到数据
客户端渲染:
不能够在网页源码中看到数据
requests常用方法
encoding #获取当前的编码
encoding = 'utf-8' #设置编码
text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
content #以字节形式(二进制)返回。
get(url,headers=headers,verify=false,proxies={'http':'194.5.193.183:80'},timeout=1)
get 和post请求的优缺点
- post 请求获取数据量更大(url长度有限制)
- post获取数据类型更多
- post 更加安全,get的参数在网址里
- post请求比get慢
requests设置代理ip
作用:
- 隐藏真实的ip
- 反爬策略
代理ip的匿名度:
- 透明 服务器知道你使用了代理ip 也知道你的真实ip
- 匿名 知道你使用了代理ip 但不知道你的真实ip
- 高匿 不知道使用了代理ip 也不知道真实ip
如何查ip:
- cmd-->ipconfig 内网ip 私有的地址 局域网
- https://www.ipip.net/ 外网 能够用于上网的ip http://httpbin.org/ip
处理不被信任证书的网站
https://inv-veri.chinatax.gov.cn/
需求:向一个不被SSl信任的网站发起请求 爬取数据
目标url:https://inv-veri.chinatax.gov.cn/SSL证书:数字证书的一种 配置在服务器上面的
SSL证书的特点:遵循了SSL协议 由收信任的数字证书颁发机构 验证身份之后颁发的证书
同时具有服务器身份验证和数据传输加密功能requests verify:true(默认) 改为false
SSL证书的发展历程:
为啥网站会出现SSL证书? 具有服务器身份验证和数据传输加密的功能
https = http + ssl