爬虫 | 基本原理

定义

  • 请求网站并提取数据的自动化程序
  • 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程

能抓怎样的数据?

  • 网页文本:如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协议:君子协议,规定了网站中哪些数据可以被爬取,哪些数据不可以被爬取

爬虫价值:买卖数据;数据分析,出分析报告;流量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值