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

爬虫的基本流程

发起请求

通过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格式化文本等

图片:获取到的是二进制文件,保存为图片格式

视频:同样是二进制文件

其他:只要请求到的,都可以获取

如何解析数据

直接处理

Json解析

正则表达式处理

BeautifulSoup解析处理

PyQuery解析处理

XPath解析处理

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

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

如何解决js渲染的问题?

分析ajax

Selenium/webdriver

Splash

PyV8,Ghost.py

怎样保存数据

文本:纯文本,Json,Xml等

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

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

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

  1. python 字符ab+字符c 2_python入门 之 字符串(二)

    注: 来自:<Python 编程 从入门到实践> 环境: windows Python 2.7 Python 之禅 1. 输入代码: import this 2. 它从本质上阐述了代码的指 ...

  2. python调用api做用户登录认证_(二)Python调用Zabbix api之从入门到放弃——登录并获取身份验证令牌...

    x.x.x.x可能是你的IP或者域名 访问流程概览: 1.首先登录 2.认证成功后zabbix server返回一个token 3.带着这个token去访问各种数据,做各种操作 4.完毕! 一.用RE ...

  3. pygame做的著名游戏_用Python和Pygame写游戏-从入门到放弃(1)

    Pygame的介绍 Pygame是一组专门为编写游戏设计的Python模块,增加了SDL库功能.可以使你在Python语言中轻松的创建全功能的游戏和多媒体程序. Pygame是免费的,在GPL许可下发 ...

  4. python运行游戏是否需要pygame_用Python和Pygame写游戏-从入门到放弃(1)

    Pygame的介绍 Pygame是一组专门为编写游戏设计的Python模块,增加了SDL库功能.可以使你在Python语言中轻松的创建全功能的游戏和多媒体程序. Pygame是免费的,在GPL许可下发 ...

  5. python生日祝福短信_python从入门到放弃篇5(tkinter模块)实现生日快乐祝福

    #从我开始学习python编程到现在也就4个月的时间,我感觉还是很不错的,我在挣扎,在坚持.因此,请不要放弃治疗. #今天太忙了,搞作业.没时间更新打奖程序了,明天再想办法看看.今天先出新东西,用tk ...

  6. Python科学计算学习:从入门到放弃系列(3)工具篇 IPython (Jupiter Notebook) 使用介绍

    1.前言 兵欲善其事,必先利其器. 发现这句话真的好有道理,我是按着张若愚的教材学Python科学计算的,他整本书,对,整本书,均是用IPython写的,也就是,编码演示和书籍撰写两不误.在这之前,我 ...

  7. Flutter入门系列(二)---Flutter的原理及美团的实践

    转载自:美团技术团队 导读 Flutter是Google开发的一套全新的跨平台.开源UI框架,支持iOS.Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件.自从2017年5月发 ...

  8. tensorflow从入门到放弃(二)

    我看着之前的笔记,发现tf2不支持placerholder占位符,现在才知道,之前知道不支持session tensorflow核心和语言支持的API 流动过程 张量 在TensorFlow系统中,张 ...

  9. FlaskWeb开发从入门到放弃(二)

    第5章 章节五 01 内容概要 02 内容回顾 03 面向对象相关补充:metaclass(一) 04 面向对象相关补充:metaclass(二) 05 WTforms实例化流程分析(一) 06 WT ...

  10. Gilbreath原理中的数学与魔术(二)——Ultimate Gilbreath 原理 Mandelbrot 集合

    早点关注我,精彩不错过! 上期Gilbreath Principle开篇我们介绍了几个基本概念:Gilbreath Shuffle,Gilbreath Permutation以及Gilbreath F ...

最新文章

  1. mysql5.5.9_mysql5.5.9字符集设置
  2. 关于vue项目中在js中引入图片问题
  3. JVM运行时栈帧结构
  4. ks检验正态分布结果_KS检验及其在机器学习中的应用
  5. 12.1 LNMP架构介绍 12.2 MySQL安装 12.3/12.4 PHP安装 12.5 Nginx介绍
  6. 计算机 函数的应用,职称计算机:公式与函数的应用(2)
  7. java面向对象数组_Java面向对象的构造器与数组对象
  8. 阻止xap文件在浏览器中缓存
  9. acm的ubuntu (ubuntu16.04 安装指南,chrome安装,vim配置,git设置和github,装QQ)
  10. 移动互联网“去哪儿”?
  11. 向来只用联发科、三星处理器的魅族,怎么就被高通控告了?
  12. python快速入门教程-终于理解python快速入门教程
  13. CF 570D. Tree Requests [dsu on tree]
  14. 《机器学习》周志华--第5章神经网络。 笔记+习题
  15. vant 个人中心头像修改
  16. 由于找不到 MSVCR120.dll,无法继续执行代码终极解决方法
  17. k8s教程(基础篇)-基本概念和术语
  18. ahb2apb bridge验证项目介绍
  19. 这些年我踩过的`Mybatis`代码生成的坑
  20. 《Java SE实战指南》10:特性修饰符

热门文章

  1. Java_io体系之BufferedWriter、BufferedReader简介、走进源码及示例——16
  2. Unity IOC + MVC 实例需要手动释放吗?
  3. MySQL root密码找回
  4. mplayer最全的命令
  5. FLEX PHP 交互 简单登录界面(1)源代码
  6. 熬夜的朋友注意了﹕看看器官的工作時間
  7. 20170728上课笔记
  8. SpringMVC:JSON
  9. Python学习路程day18
  10. C语言 链表的创建--打印--逆置--新增--删除--排序--释放