定义
- 请求网站并提取数据的自动化程序
- 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程
能抓怎样的数据?
- 网页文本:如HTML文档,Json格式文本等
- 图片:获取到的是二进制文件,保存为图片格式
- 视频:同为二进制文件,保存为视频格式即可
- 其它:只要是能请求到的,都能获取
基本流程
- 发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应
- 获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型
- 解析内容:得到的内容可能是HTML,可以用正则表达式,网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步处理
- 保存数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件
爬虫分类
- 通用爬虫:抓取系统重要组成部分,抓取的是一整张页面数据
- 聚焦爬虫:是建立在通用爬虫的基础之上,抓取的是页面中特定的局部内容
- 增量式爬虫:检测网站中数据更新的情况,只会抓取网站中更新出来的数据
风险
- 爬虫干扰了被访问网站的正常运营
- 爬虫抓取了受到法律保护的特定类型的数据或信息
合法性
- 时常优化自己的程序,避免干扰被访问网站的正常运行
- 在使用,传播爬取到的数据时,审查抓取到的内容,如果发现了涉及到用户隐私,商业机密等敏感内容需要及时停止爬取或传播
Request与Response
- 浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request
- 服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response
- 浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示
Request
- 请求方式:主要有GET,POST两种类型,另外还有HEAD,PUT,DELETE,OPTIONS等
- 请求URL:URL全称统一资源定位符,如一个网页文档,一张图片,一个视频都可以用URL唯一确定
- 请求头:包含请求时的头部信息,如User-Agent,Host,Cookies等信息
- 请求体:请求时额外携带的数据如表单提交时的表单数据
Response
- 响应状态:有多种响应状态,如200代表成功,301跳转,404找不到页面,502服务器错误
- 响应头:如内容类型,内容长度,服务器信息,设置Cookie等
- 响应体:最主要的部分,包含了请求资源的内容,如网页HTML,图片二进制数据等
http协议
- 就是服务器和客户端进行数据交互的一种形式
- 当用户在地址栏中输入了网址,发送网络请求的过程是什么
- 常用的请求方式有get和post
- get:优点是比较便捷;缺点是明文不安全,账号密码易泄露,参数的长度有限制
- post:优点是比较安全,数据整体没有限制,可以上传文件
Request Headers
- Accept:返回的格式
- Accept-Encoding:编码方式,gzip
- Connection:长短连接,leap-alive,(请求完毕后,是断开连接还是保持连接)
- Cookie:缓存,验证用
- Host:域名
- Refer:标志从哪个页面跳转来的
- User-Agent:浏览器和用户信息(请求载体的身份标识)
User-Agent
- 模拟真实浏览器发送请求(使用场合:百度批量搜索)
- 如何获取:浏览器的审查元素里,或百度user-agent大全
- 设置方法:request.add_header(动态添加user-agent)
- 响应头:response.headers
Response Headers
- cache-control:缓存大小
- Date:发送请求的时间
- Expires:发送请求结束时间
- Content-Type:服务器响应回客户端的数据类型
get传参
- 汉字报错:解释器ascii没有汉字,url汉字转码
- 字典传参:urllib.parse.urlencode(url)
post请求
- urllib.request.urlopen(url,data=“服务器接受的数据”)
handler
- 处理器的自定义
- 系统的urlopen()不支持添加代理
- 需要创建对应的处理器(handler):代理处理器ProxyHandler(proxy);拿着代理处理器创建opener:build_opener();opener.open(url)发送请求
robots
- 规定是否允许其它爬虫爬取某些内容
- 聚焦爬虫不遵守robots
- 查看方法:www.baidu.com/robots.txt
IP代理
- 免费IP:时效性差,错误率高
- 收费IP:拥有失效不能用的
IP分类
- 透明:对方知道我们真实的IP
- 匿名:对方不知道我们真实的IP,但知道使用了代理
- 高匿:对方不知道我们真实的IP,也不知道使用了代理
解析方式:直接处理,Json解析,正则表达式,BeautifulSoup,PyQuery,XPath
解决JavaScript渲染问题:分析Ajax请求,Selenium/WebDriver,Splash,PyV8,Ghost.py
保存数据:文本,关系型数据库,非关系型数据库,二进制文件
发送网络请求需要带(也可以不带)一定的数据(放在request headers里)给服务器(返回数据:response)
https协议:安全的超文本传输协议
加密方式:对称秘钥加密,非对称秘钥加密,证书秘钥加密
反爬机制:门户网站可以通过制定相应的策略或技术手段,防止爬虫程序进行网站数据的爬取
反反爬策略:爬虫程序可以通过制定相关的策略或技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网站中相关的数据
robots.txt协议:君子协议,规定了网站中哪些数据可以被爬取,哪些数据不可以被爬取
爬虫价值:买卖数据;数据分析,出分析报告;流量