通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。浏览器就是一个原始的、天然的基于爬虫的工具,搜索引擎就是爬虫。
爬虫带来的风险
爬虫就像水果刀,法律不禁止,但捅人就犯法了。
-
爬虫干扰了被访问网站的正常运营
-
爬虫抓取了收到法律保护的特定类型的数据或信息
如何避免进入局子呢?
-
时常的优化自己的程序,避免干扰被访问网站的正常运行
-
在使用,传播爬取到的数据时,审查抓取到的内容,如果发现了涉及到用户信息、隐私、商业机密等敏感内容需要及时停止爬取或传播
爬虫在使用场景中的分类
-
通用爬虫
很多搜索引擎的抓取系统的重要组成部分,特点是抓取一整张页面数据。
-
聚焦爬虫
建立在通用爬虫的基础上,抓取的是页面中指定的局部内容(例如只要评论区的评论内容)。
-
增量式爬虫
检测网站中数据更新的情况,之会抓取网站中最新更新的数据。
爬虫相关常识
Python中爬虫相关的包很多:urllib、requests、bs4、scrapy、pyspider 等,建议从requests+Xpath 开始,requests 负责连接网站,返回网页,Xpath 用于解析网页,便于抽取数据。urllib的api比较繁琐,不如requests简便。
大部分爬虫都是按“发送请求——获得页面——解析页面——抽取并储存内容”这样的流程来进行,这其实也是模拟了我们使用浏览器获取网页信息的过程。
scrapy 是一个功能非常强大的爬虫框架,它不仅能便捷地构建request,还有强大的 selector 能够方便地解析 response,然而它最让人惊喜的还是它超高的性能,让你可以将爬虫工程化、模块化。
爬回来的数据量小的时候,你可以用文档的形式来存储,一旦数据量大了,这就有点行不通了。所以掌握一种数据库是必须的,学习目前比较主流的 MongoDB 就OK。MongoDB 可以方便你去存储一些非结构化的数据,比如各种评论的文本,图片的链接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。
当爬取基本数据已经不是问题了,你的瓶颈会集中到爬取海量数据的效率。这个时候,相信你会很自然地接触到一个很厉害的名字:分布式爬虫。分布式这个东西,听起来很恐怖,但其实就是利用多线程的原理让多个爬虫同时工作,需要你掌握 Scrapy + MongoDB + Redis 这三种工具。其中Redis 则用来存储要爬取的网页队列,也就是任务队列。
反爬机制
门户网站,可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。
反反爬策略
爬虫程序可以通过制定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网站的数据。
robots.txt协议
90年代初搜索引擎和网站达成共识建立了君子协议robots.txt协议,约定网站哪些内容可以被爬,哪些内容不可以爬。君子协议,直译,不防小人,只是口头约定上不可以爬哪些协议,希望你遵守,但是没有技术上的措施。如果你要爬网站在robots.txt协议列举的不能爬的数据,一定要偷偷的哦!
查看robots.txt协议
网站域名/robots.txt
例如https://www.taobao.com/robots.txt https://www.sohu.com/robots.txt
Disallow后的目录是不可爬取的,Allow后的目录则可爬:
http协议
常用请求头信息
User-Agent | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0 请求载体的身份标识 |
---|---|
Connection | keep-alive / close 请求完毕后是断开连接还是保持连接?。 |
常用的响应头信息
content-type | image/x-icon / 字符串 / json等等 响应数据的类型 |
https协议
http的数据交互中是不加密的,而https的数据是加密的。安全的超文本传输协议。
加密方式
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.ink0.cn/index.php/2023/02/24/01%e5%bc%95%e8%a8%80/
共有 0 条评论