在上文中我们说了:爬虫就是请求网站并提取数据的自动化程序。其中请求,提取,自动化是爬虫的关键!下面我们分析爬虫的基本流程

爬虫的基本流程

发起请求
通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应

获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型

解析内容
得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理

保存数据
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件

什么是Request,Response

浏览器发送消息给网址所在的服务器,这个过程就叫做HTPP Request

服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应的处理,然后把消息回传给浏览器,这个过程就是HTTP Response

浏览器收到服务器的Response信息后,会对信息进行相应的处理,然后展示

Request中包含什么?

请求方式

主要有:GET/POST两种类型常用,另外还有HEAD/PUT/DELETE/OPTIONS
GET和POST的区别就是:请求的数据GET是在url中,POST则是存放在头部

GET:向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问

POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

PUT:向指定资源位置上传其最新内容。

OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

DELETE:请求服务器删除Request-URI所标识的资源。

请求URL

URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

URL的格式由三个部分组成:
第一部分是协议(或称为服务方式)。
第二部分是存有该资源的主机IP地址(有时也包括端口号)。
第三部分是主机资源的具体地址,如目录和文件名等。

爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依据。

请求头

包含请求时的头部信息,如User-Agent,Host,Cookies等信息,下图是请求请求百度时,所有的请求头部信息参数

请求体
请求是携带的数据,如提交表单数据时候的表单数据(POST)

Response中包含了什么

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。

响应状态

有多种响应状态,如:200代表成功,301跳转,404找不到页面,502服务器错误

  • 1xx消息——请求已被服务器接收,继续处理
  • 2xx成功——请求已成功被服务器接收、理解、并接受
  • 3xx重定向——需要后续操作才能完成这一请求
  • 4xx请求错误——请求含有词法错误或者无法被执行
  • 5xx服务器错误——服务器在处理某个正确请求时发生错误 常见代码: 200 OK 请求成功 400 Bad Request 客户端请求有语法错误,不能被服务器所理解 401 Unauthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden 服务器收到请求,但是拒绝提供服务 404 Not Found 请求资源不存在,eg:输入了错误的URL 500 Internal Server Error 服务器发生不可预期的错误 503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 301 目标永久性转移 302 目标暂时性转移

响应头

如内容类型,类型的长度,服务器信息,设置Cookie,如下图

响应体

最主要的部分,包含请求资源的内容,如网页HTMl,图片,二进制数据等

能爬取什么样的数据

网页文本:如HTML文档,Json格式化文本等
图片:获取到的是二进制文件,保存为图片格式
视频:同样是二进制文件
其他:只要请求到的,都可以获取

如何解析数据

  1. 直接处理
  2. Json解析
  3. 正则表达式处理
  4. BeautifulSoup解析处理
  5. PyQuery解析处理
  6. XPath解析处理

关于抓取的页面数据和浏览器里看到的不一样的问题

出现这种情况是因为,很多网站中的数据都是通过js,ajax动态加载的,所以直接通过get请求获取的页面和浏览器显示的不同。

如何解决js渲染的问题?

分析ajax
Selenium/webdriver
Splash
PyV8,Ghost.py

怎样保存数据

文本:纯文本,Json,Xml等

关系型数据库:如mysql,oracle,sql server等结构化数据库

非关系型数据库:MongoDB,Redis等key-value形式存储

原文地址: http://www.cnblogs.com/zhaof/p/6898138.html

python爬虫从入门到放弃(二)之爬虫的原理相关推荐

  1. python从入门到爬虫_python爬虫从入门到放弃(一)之初识爬虫

    什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引. ...

  2. Python爬虫新手入门教学(二十):爬取A站m3u8视频格式视频

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 前文内容 Python爬虫新手入门教学(一):爬取豆瓣电影排行信息 Python爬虫新手入门 ...

  3. Python tkinter 从入门到放弃(窗口函数)

    目录:Python tkinter 从入门到放弃(1)_BBBBBBBBBBBBBBBUG的博客-CSDN博客_python tkinter 文章目录 一.窗口表面 1.标题 2.窗口大小和位置 (1 ...

  4. 【Python】Python实战从入门到精通之二 -- 教你使用Python中列表操作

    本文是Python实战–从入门到精通系列的第二篇文章: [Python]Python实战从入门到精通之一 – 教你深入理解Python中的变量和数据类型 Python实战从入门到精通之二 – 教你使用 ...

  5. Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理

    原文地址https://www.cnblogs.com/zhaof/p/7173397.html 这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍 Scrapy目前已经可以很好的 ...

  6. python爬虫原理-python爬虫从入门到放弃(二)之爬虫的原理

    在上文中我们说了:爬虫就是请求网站并提取数据的自动化程序.其中请求,提取,自动化是爬虫的关键!下面我们分析爬虫的基本流程 爬虫的基本流程 发起请求 通过HTTP库向目标站点发起请求,也就是发送一个Re ...

  7. python爬虫从入门到放弃-python爬虫从入门到放弃(二)之爬虫的原理

    在上文中我们说了:爬虫就是请求网站并提取数据的自动化程序.其中请求,提取,自动化是爬虫的关键!下面我们分析爬虫的基本流程 爬虫的基本流程 发起请求 通过HTTP库向目标站点发起请求,也就是发送一个Re ...

  8. Python爬虫从入门到放弃(二十二)之 爬虫与反爬虫大战

    爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序 反爬虫:使用技术手段防止爬虫程序爬取数据 误伤:反爬虫技术将普 ...

  9. python爬虫从入门到放弃(一)初识爬虫

    在家里呆了几个月,重新拾起python爬虫,想着搞点东西(爱情电影)看看,发现爬虫真的是好开心. 网络爬虫是什么呢? 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者) ...

最新文章

  1. Redis 概念以及底层数据结构
  2. 使用pxe来实现无人值守linux
  3. 统计学习方法第三章作业:一般k邻近、平衡kd树构造、kd树邻近搜索算法代码实现
  4. fckeditor 漏洞php,fckeditor上传漏洞利用总结
  5. java并发编程之美-阅读记录7
  6. ES6-1 ES6版本过渡历史
  7. 关于 ASP.NET MVC 中的视图生成
  8. 给GridView设置行高
  9. Spring Cloud 分布式 微服务 最佳实践之一
  10. 【免费毕设】ASP.NET猜数游戏的设计与开发(源代码+lunwen)
  11. 云服务器的主要用途是什么?
  12. bootstrap-table初始化配置
  13. 如何下载sonar?
  14. 3.2-点云配准原理概述
  15. 关于stm32通过can与epos控制器建立通信,从而控制Maxon电机运转并且实时检测电机参数
  16. 视频会议实现方式有哪些
  17. 计算机网络ip地址分类6,c类ip地址划分6个子网
  18. 兔子能不能跑得过乌龟
  19. MacOS 单机搭建 Pulsar 集群
  20. 用心邂逅美好,用爱守护童真

热门文章

  1. [JAVA] IOException: Invalid byte 2 of 2-byte UTF-8 sequence(解决办法)
  2. 中科燕园GIS外包-----基于ArcGIS的应急平台
  3. C# Image 、 byte[] 、Bitmap之间的转化
  4. javamail发送邮件的简单实例[转]
  5. C++ unique and erase问题处理
  6. 单核工作法15:循序渐进
  7. 系统安装重装与优化:chapter6:使用常用软件与电脑外设
  8. linux图形界面编程基本知识
  9. 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
  10. 科大星云诗社动态20220102