爬虫的基本原理

所谓爬虫就是一个自动化数据采集工具,你只要告诉它要采集哪些数据,丢给它一个 URL,就能自动地抓取数据了。其背后的基本原理就是爬虫程序向目标服务器发起 HTTP 请求,然后目标服务器返回响应结果,爬虫客户端收到响应并从中提取数据,再进行数据清洗、数据存储工作。

爬虫的基本流程

爬虫流程也是一个 HTTP 请求的过程,以浏览器访问一个网址为例,从用户输入 URL 开始,客户端通过 DNS 解析查询到目标服务器的 IP 地址,然后与之建立 TCP 连接,连接成功后,浏览器构造一个 HTTP 请求发送给服务器,服务器收到请求之后,从数据库查到相应的数据并封装成一个 HTTP 响应,然后将响应结果返回给浏览器,浏览器对响应内容进行数据解析、提取、渲染并最终展示在你面前。


HTTP 协议的请求和响应都必须遵循固定的格式,只有遵循统一的 HTTP 请求格式,服务器才能正确解析不同客户端发的请求,同样地,服务器遵循统一的响应格式,客户端才得以正确解析不同网站发过来的响应。

HTTP 请求格式

HTTP 请求由请求行、请求头、空行、请求体组成。

请求行由三部分组成:

  1. 第一部分是请求方法,常见的请求方法有 GET、POST、PUT、DELETE、HEAD
  2. 第二部分是客户端要获取的资源路径
  3. 第三部分是客户端使用的 HTTP 协议版本号

请求头是客户端向服务器发送请求的补充说明,比如 User-Agent 向服务器说明客户端的身份。

请求体是客户端向服务器提交的数据,比如用户登录时需要提高的账号密码信息。请求头与请求体之间用空行隔开。请求体并不是所有的请求都有的,比如一般的GET都不会带有请求体。

上图就是浏览器登录豆瓣时向服务器发送的HTTP POST 请求,请求体中指定了用户名和密码。

响应行也包含三部分,分别是服务端的 HTTP 版本号、响应状态码、状态说明。

  • 响应状态码常见有 200、400、404、500、502、304 等等,一般以 2 开头的表示服务器正常响应了客户端请求,4 开头表示客户端的请求有问题,5 开头表示服务器出错了,没法正确处理客户端请求。状态码说明就是对该状态码的一个简短描述。
  • 响应头,响应头与请求头对应,是服务器对该响应的一些附加说明,比如响应内容的格式是什么,响应内容的长度有多少、什么时间返回给客户端的、甚至还有一些 Cookie 信息也会放在响应头里面。
  • 响应体,它才是真正的响应数据,这些数据其实就是网页的 HTML 源代码。

小结

这仅仅只是一个爬虫基本原理的介绍,涉及的 HTTP 协议的内容也非常有限,但不可能用一篇文章事无巨细的介绍完,因为 HTTP 协议是一个很大的话题,用一本书也写不完,深入了解推荐两本书《图解HTTP》、《HTTP权威指南》。

大家好 我是爱着你们的萝卜

记得关注我 不定时更新 ❤

微信公众号爬虫的基本原理相关推荐

  1. 基于Python实现微信公众号爬虫进行数据分析

    学爬虫有什么用 网络爬虫是一个非常注重实践性而且实用性很强的编程技能,它不是程序员的专属技能,任何具有一定编程基础的人都可以学习爬虫,写爬虫分析股票走势,上链家爬房源分析房价趋势,爬知乎.爬豆瓣.爬新 ...

  2. 微信公众号爬虫项目(reptile)

    代码仓库地址:reptile: 爬虫项目,微信公众号文章爬虫,网站文章爬虫,群发邮件系统 项目背景 个人在业余时间,写的一个以微信公众号爬虫为主要功能,普通网页爬虫.浏览器控制.邮件群发功能为辅的简单 ...

  3. 【Python爬虫实战】微信公众号爬虫:微信公众号浏览自动化

    本文内容详细介绍微信公众号历史文章自动化浏览脚本的实现,配合服务端对公众号文章数据爬取来实现微信公众号文章数据的采集.服务端爬取实现见:微信公众号爬虫:服务端公众号文章数据采集 背景:在团队的学习方面 ...

  4. 【开源Python爬虫】微信公众号爬虫weixin_crawler开源啦

    作者 | 抽丝剥茧 出品 | 爱迪斯 微信公众号爬虫weixin_crawler开源啦 正式介绍weixin_crawler之前,我准备了两个问题,这两个问题通过weixin_crawler自带的报告 ...

  5. 使用搜狗接口对微信公众号爬虫

    搜狗搜索因为有微信公众号搜索的接口,所以通过这个接口就可以实现公众号的爬虫 需要安装几个python的库:selenium,pyquery 还使用到phantomjs.exe,这个需要我们自己去下载, ...

  6. 微信公众号爬虫,看这个就足够了

    我订阅了 253 个公众号,有时候想再找之前读过的文章,发现搜索起来特别困难,如果忘了收藏,估计得找半小时,更让人无语的是,文章已经发布者删除,或者文章因违规被删除.那么有没有这样的爬虫,可以将公众号 ...

  7. 微信公众号爬虫(综合解决方案)

    最终解决方案 通过搜狗微信先检索公众号,获取公众号主页链接,接着爬每一篇具体文章,具体用selenium实现,当然你也可以用webkit.Geoko渲染引擎自己去渲染.用selenium.webkit ...

  8. python微信公众号爬虫_Python爬取指定微信公众号所有文章!

    篇文章使用到的技术: mitmdump + 电脑版微信 先分析打开可视化抓包工具, 勾选https代理.然后打开电脑版微信 任意点击一个公众号,再点击查看历史消息 注:想学习Python的小伙伴们 可 ...

  9. python微信公众号爬虫_微信公众号推送信息爬取---python爬虫

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

最新文章

  1. MySQL配置文件参数详解
  2. javaweb学习总结(三十)——EL函数库
  3. arthas classclassloader相关命令之二:jad、mc、redifine实现代码热更新(热替换)
  4. RuntimeError: dictionary changed size during iteration
  5. dp套dp(动态规划)
  6. mysql pt archiver_mysql 案例 ~ pt-archiver 归档工具的使用
  7. 真香!谷歌终与美国国防部合作,签署百万美金云服务合同
  8. 微信开发-UnionID机制相关文档
  9. 数字图像处理matlab 版下载,数字图像处理(MATLAB版)
  10. 卫星定轨理论、GPS信号与卫星星历
  11. 基于FL2440 的V4L2采集 + H264编码 + LIVE555发布的实时视频监控系统
  12. Flutter中的widget
  13. Hyman分别测试法
  14. Android开发添加QQ群 跳到QQ聊天页面
  15. R语言ggplot2可视化:使用ggpubr包的arrangeGrob函数将多个可视化结果整合为gtable对象、使用as_ggplot函数将gtable对象转化为ggplot对象
  16. call()、apply()、bind()的区别
  17. aaa_base is needed by MySQL-server-5.5.23-1.sles11.x86_64
  18. 工作电子邮箱怎么注册,电子邮箱格式怎么写?
  19. AMEsim16安装启动后加载液压模块与车辆动力学模块
  20. 集电极开路(OC)/漏极开路(OD)输出的结构

热门文章

  1. jpush推送格式 swift_swift 极光推送
  2. Linux服务器安装matlab
  3. 观众网app android,观众网手机客户端(电视节目录制报名)
  4. 【原创】JavaWeb仓库管理系统(Web仓库管理系统毕业设计)
  5. 史上最全电磁仿真(HFSS、CST、FEKO)时域、频域精准配置推荐
  6. AE 以及 Bodymovin的安装
  7. Android9--android 10.0 去掉未知来源弹窗 默认授予安装未知来源权限
  8. 解读中国人才流动数据
  9. 修改linux终端命令行颜色
  10. 贵州茅台的中国版四因子归因【课程作业】