[Python] 爬虫系统与数据处理实战 Part.1 静态网页
爬虫技术基础
- HTTP/HTTPS(7层):应用层,浏览器
- SSL:加密层,传输层、应用层之间
- TCP/IP(4层):传输层
- 数据在传输过程中是加密的,浏览器显示的是解密后的数据,对爬虫没有影响
- 中间人攻击:在传输过程中对数据包进行解析,抓包抓的是IP包,数据是加密的
- 网页类型
- 静态网页:HTML,或PHP+JSP后台写HTML
- 动态网页(前后分离):前端HTML+JavaScript,后端提供数据接口,js请求数据
- APP内嵌HTML(WebView引擎)
- 云端下发完整HTML(今日头条)
- 本地HTML模板+远程数据(微信)
- 移动端APP(抖音)
- 反编译APP
- 爬虫应用
- 搜索引擎:google
- 推荐系统:今日头条
- 社交软件冷启动:探探(爬取新浪微博的数据构造假用户)
- 自然语言处理的训练集:先从维基爬取信息作为标注的输出结果集,再用google查询结果集作为训练集构建模型
- 图像训练:训练过滤器(照片、油画、素描),提高搜索准确性
- 关系分析:天眼查,记录全国所有公司股东信息、关联关系
- 价格追踪:pricegrabber,比价网站

HTTP
- 应用层协议
- 无连接:每次连接只处理一个请求(手机给电脑传数据,传完就拔线;有连接,socket通信,三次握手)
- 无状态:每次连接、传输都是独立的
- HEADER(头信息)、body(数据)
- Request(Client->Server)、Response(Server->Client)
- Request 的 HTTP Header
Charset:编码,Python默认utf-8
Encoding:源代码压缩方式,不写不压缩
keep-alive:不关闭socket连接
User-Agent:客户端类型(手机、电脑打开淘宝网址,会自适应屏幕),爬虫代码中需要伪装成浏览器,通过服务器检查
Cookie:服务端response发放给客户端,客户端下次访问时携带方便识别(买了课的用户才能看视频,门票,证件),用于需要登录才能获取数据的网站(微博),登录--获取cookie--设置到header--爬取
- Request 方法
- GET:向服务器请求数据,只有header,没有body,安全(不修改服务器数据),抓网页用
- POST:向服务器发送内容,有header和body,不安全(可能修改服务器数据),抓API用
- Idempotent:幂等,多次操作结果不变


- Response的Header
- Location:跳转到地址
- Set-Cookie:服务端给客户端的Cookie
- Status:状态码,表示请求结果
- 2XX:成功
- 3XX:跳转(302:重定向,urllib2库会对重定向做处理,实现自动跳转)
- 4XX:客户端错误(401:未授权,403:拒绝提供服务,404:资源不存在)
- 5XX:服务器错误(500:服务器未知错误,503:服务器不能处理请求)
- 错误处理
- 400:Bad Request,检查请求的参数或路径
- 401:Unauthorized,需授权的网页的Cookie到期,尝试重新登录
- 403:Forbidden,需要登录的网站,尝试重新登录;IP被封,暂定爬取,增加爬虫等待时间
- 404:Not Found,直接丢弃
- 5XX:直接丢弃,并计数,如连续不成功,停止爬取
CSS
- class、id可帮助定位爬取内容
DOM树
- 通过路径找到内容
JavaScript
- 动态网页:如京东,价格信息通过js动态请求然后渲染,不能通过直接下载HTML获取信息
- 通过AJAX接口爬取,可能更简单
爬取原理
- 网页间通过<a>构成网页树
- 宽度优先:把孩子节点放入队列
- 深度优先


- 选取原则
- 重要网页距种子站点较近
- 万维网的深度并没有很深(<=17层),一个网页有很多路径可以到达
- 宽度优先有利于多爬虫合作爬取
- 深度限制与宽度优先结合(深度到达关注网页,再宽度抓取)
- 类比:学的深还是学的专?创业办某领域小公司还是平台型公司
- 深度优先注意限制层数,否则不会停
如何记录抓取历史
- 不重复抓取策略:记录已抓取网页,避免重复访问
- 保存在数据库中,效率较低(几十万以下可用)
- 用HashSet将访问的URL保存,只需O(1)代价就可查到是否访问过,消耗内存(URL可能很长)
- URL经MD5(都是16字节)或SHA-1等单向哈希后再保存到HashSet或数据库
- Java的HashTable是一个Hash表再跟一个链表,链表中保存碰撞结果
- Bit-Map方法,建立一个BitSet,将每个URL经哈希函数映射到某一BIT
- Bloom Filter:使用了多个哈希函数映射URL,减少碰撞,提高空间利用率,只能插入不能删除
- pip install murmurhash3 bitarray
- pip install pybloomfilter
如已经爬取了10w网页,又来了1个新网页,如何判断它是否在保存的10w个网页当中[爬虫陷阱]

如何提高效率
- 评估网站数量
- site:www.mafengwo.cn
- 选择合适HASH算法和空间阈值,降低碰撞几率
- 选择合适的存储结构和算法


总结
- 多数情况不需要压缩,尤其网页数量少的情况
- 网页数量大的情况,使用Bloom Filter压缩
- 重点是验算碰撞概率,并根据碰撞概率来确定存储空间的阈值
- 分布式系统,将散列映射到多台主机的内存
[Python] 爬虫系统与数据处理实战 Part.1 静态网页的更多相关文章
- Python爬虫开发与项目实战
Python爬虫开发与项目实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1MFexF6S4No_FtC5U2GCKqQ 提取码:gtz1 复制这段内容后打开百度 ...
- Python爬虫开发与项目实战pdf电子书|网盘链接带提取码直接提取|
Python爬虫开发与项目实战从基本的爬虫原理开始讲解,通过介绍Pthyon编程语言与HTML基础知识引领读者入门,之后根据当前风起云涌的云计算.大数据热潮,重点讲述了云计算的相关内容及其在爬虫中的应 ...
- Python爬虫的概括以及实战
第一章主要讲解爬虫相关的知识如:http.网页.爬虫法律等,让大家对爬虫有了一个比较完善的了解和一些题外的知识点. 今天这篇文章将是我们第二章的第一篇,我们从今天开始就正式进入实战阶段,后面将会有更 ...
- Python爬虫系统学习(1)
Python爬虫系统化学习(1) 前言:爬虫的学习对生活中很多事情都很有帮助,比如买房的时候爬取房价,爬取影评之类的,学习爬虫也是在提升对Python的掌握,所以我准备用2-3周的晚上时间,提升自己对 ...
- python爬虫抓取哈尔滨天气信息(静态爬虫)
python 爬虫 爬取哈尔滨天气信息 - http://www.weather.com.cn/weather/101050101.shtml 环境: windows7 python3.4(pip i ...
- 如何让Python爬虫一天抓取100万张网页
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 源自:猿人学Python PS:如有需要Python学习资料的 ...
- Python爬虫学习三------requests+BeautifulSoup爬取简单网页
第一次第一次用MarkDown来写博客,先试试效果吧! 昨天2018俄罗斯世界杯拉开了大幕,作为一个伪球迷,当然也得为世界杯做出一点贡献啦. 于是今天就编写了一个爬虫程序将腾讯新闻下世界杯专题的相关新 ...
- Python爬虫:为什么你爬取不到网页数据
前言: 之前小编写了一篇关于爬虫为什么爬取不到数据文章(文章链接为:Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章), 但是当时小编也是胡乱编写的,其实里面有很多问题的,现在小编重新发 ...
- python爬虫入门新手向实战 - 爬取猫眼电影Top100排行榜
本次主要爬取Top100电影榜单的电影名.主演和上映时间, 同时保存为excel表个形式, 其他相似榜单也都可以依葫芦画瓢 首先打开要爬取的网址https://maoyan.com/board/4, ...
随机推荐
- Java中的三大特性 - 超详细篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的三大特性 - 超详细篇>,希望对大家有帮助,谢谢 这一节的内容可能有点多,大家可以选择性的来看 简介 Java的三大特性:封装.继 ...
- 幻灯片放映模式切换windows terminal背景图片
目录 幻灯片放映模式切换windows terminal背景图片 脚本功能 开发需求 使用技术 操作说明 使用示例 查看帮助 输入参数使用 脚本详情 引用参考 幻灯片放映模式切换windows ter ...
- 字符串函数的实现(三)之strcat
C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...
- 解决SQLPLUS无法使用上下箭头
1 问题描述 SQLPLUS中使用上下箭头无法获取历史命令,如下图所示: 按上下箭头会显示^[[A/^[[B. 2 解决方案 需要安装rlwrap,可以的话可以用包管理器安装,笔者环境CentOS,这 ...
- Typora+PicGo+阿里云写博客笔记
Typora+PicGo+阿里云写博客笔记 选择这三个工具的理由 我一直有在使用typora使用mardown写作,毕竟typora很香,可以实时预览,非常丝滑. 配合上PicGo这个图床工具简直绝了 ...
- SpringBoot 启动慢?那是因为你不知道它
前言 在 2021 年这个小学作文中的未来年份,没有想象中的汽车满天飞,也没有实现机器人满地跑.但牛逼的是我们都有一个共识: 知乎达到了人均 "谢邀~ 人在美国刚下飞机"的生活水平 ...
- centos7安装kubernetes k8s 1.16
#初始化服务器 echo 'export LC_ALL="en_US.UTF-8"' >> /etc/profile source /etc/profile #!/bi ...
- 【布隆过滤器】基于Hutool库实现的布隆过滤器Demo
布隆过滤器出现的背景: 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树.散列表(又叫哈希表,Hash table)等等数据结构都是这种思路,存储 ...
- 《机器学习Python实现_10_09_集成学习_bagging_stacking原理及实现》
介绍 前面对模型的组合主要用了两种方式: (1)一种是平均/投票: (2)另外一种是加权平均/投票: 所以,我们有时就会陷入纠结,是平均的好,还是加权的好,那如果是加权,权重又该如何分配的好?如果我们 ...
- POJ 1679 判断最小树是否唯一
题意: 给你一个图,问你最小树是否唯一,唯一则输出最小数的权值,不唯一输出Not Unique! 思路: 题目问的是最小树是否唯一,其实也就是在问次小树是否等于最小树,如果等于则 ...