python爬虫的原理以及步骤-Python-爬虫的基本原理

什么是爬虫

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

爬虫的基本流程

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTMzMzIxMDEyLTE4MjQ3MzQxNjQucG5n.jpg

发起请求

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

获取响应内容

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

解析内容

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

保存数据

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

什么是Request,Response?

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTMzODA5NDI3LTUzMDU0NjQ2OC5wbmc=.jpg

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

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

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

Request中包含什么?

L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvbG9hZGluZy5naWY=.jpg

请求方式

主要有: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等信息,下图是请求请求百度时,所有的请求头部信息参数

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTM0MjU0MDczLTk0NDYzNjU2MS5wbmc=.jpg

请求体

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

Response中包含了什么

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTQwMDEyMTg3LTExNzE1ODI3MjQucG5n.jpg

所有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,如下图

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTM0MzUwOTI4LTM3MjI5NjU5NS5wbmc=.jpg

响应体

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

简单使用:

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTQwMTM5MzA5LTg3OTY4MTUxLnBuZw==.jpg

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTQwMjA1NjU5LTY4NDQwNDQ4LnBuZw==.jpg

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTQwMjI2NTc0LTExMjExNDE0NTQucG5n.jpg

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTQwNDA3MjM3LTIwNDIzMTg0NzcucG5n.jpg

能爬取什么样的数据?

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTQ1MTA5NDcwLTI1OTE5MTk2OC5wbmc=.jpg

网页文本:如HTML文档,Json格式化文本等

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

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTQwODA0MzkxLTE5MTQ2OTc1ODQucG5n.jpg

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTQwOTIwMTY3LTQ5MDk3ODMxNS5wbmc=.jpg

视频:同样是二进制文件

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

如何解析数据

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTQ1NDUxMDc3LTEyNjEyODIzOTkucG5n.jpg

直接处理

Json解析

正则表达式处理

BeautifulSoup解析处理

PyQuery解析处理

XPath解析处理

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

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTQ1OTI3NDA4LTQ1NzkyMjU1Ni5wbmc=.jpg

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

如何解决js渲染的问题?

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTUwNjMwMjQ0LTE1OTkwMDEwMTgucG5n.jpg

分析ajax

Selenium/webdriver:

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTUwNDUwNTA3LTE5MTc2MjA3MjcucG5n.jpg

Splash

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTUwNjAzOTM5LTE4MDU2Njk0Ni5wbmc=.jpg

PyV8,Ghost.py

怎样保存数据

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNjA0NTE0LzIwMTkwNC8xNjA0NTE0LTIwMTkwNDIwMTUwODE5NDE2LTE5MDc2NzYyMjYucG5n.jpg

文本:纯文本,Json,Xml等

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

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

二进制文件:如图片、视频、音频、等等直接保存成特殊格式即可

L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvbG9hZGluZy5naWY=.jpg

Python爬虫教程

Python爬虫(1):基本原理 Python爬虫(2):Requests的基本用法 Python爬虫(3):Requests的高级用法 Python爬虫(4):Beautiful Soup的常用方法 ...

小白如何入门 Python 爬虫?

本文针对初学者,我会用最简单的案例告诉你如何入门python爬虫! 想要入门Python 爬虫首先需要解决四个问题 熟悉python编程 了解HTML 了解网络爬虫的基本原理 学习使用python爬虫 ...

Python爬虫【一】爬虫的基本原理

一.爬虫基本原理 1.获取网络数据 用户方式:浏览器提交请求->下载网页代码->解析/渲染成页面 爬虫方式:模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放 ...

PYTHON 爬虫笔记一:爬虫基本原理梳理

知识点一:爬虫的基本原理梳理 一.什么是爬虫? 请求网站并提取数据的自动化程序 二.爬虫的基本流程 1:向服务器发起请求 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的 ...

python网络爬虫进阶之HTTP原理,爬虫的基本原理,Cookies和代理介绍

目录 一.HTTP基本原理 (一)URI和URL (二)超文本 (三)HTTP和HTTPS (四)HTTP请求过程 (五)请求 1.请求方法 2.请求的网址 3.请求头 4.请求体 (六)响应 1.响 ...

Python 爬虫模拟登陆知乎

在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

python爬虫如何入门

学爬虫是循序渐进的过程,作为零基础小白,大体上可分为三个阶段,第一阶段是入门,掌握必备的基础知识,第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,第三阶段是自己动手,这个阶段你开始有自己的解题思 ...

python爬虫知乎

在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

Python爬虫(1):基础知识

爬虫基础知识 一.什么是爬虫? 向网站发起请求,获取资源后分析并提取有用数据的程序. 二.爬虫的基本流程 1.发起请求 2.获取内容 3.解析内容 4.保存数据 三.Request和Response ...

Python爬虫-什么是爬虫?

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

随机推荐

服务端跨域处理 Cors

1 ?添加?System.Web.Cors,System.Web.Http.Cors 2 global文件中 注册asp.net 管道事件 protected void Application_Beg ...

不断弹出svchost.exe错误框

同事的一台电脑,xp系统,启动后就弹出svchost错误的对话框,不论确定还是取消,关闭后立刻又弹出. 打开任务管理器,尝试对一些后安装的软件结束进程,结束一个,关闭一次,看看结束哪一个,关闭后不再弹 ...

Android中自定义属性(attrs.xml,TypedArray的使用)

做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了.那么如何才能做到像官方 ...

Web QQ自动强制加好友代码

也许见过强行聊天的代码: ?tencent://Message/?Uin=574201314&websiteName=www.oicqzone.com&Menu=yes 但是你应该不知 ...

关于ligerform中select与text的赋值与取值

如有下ligerform表单: var formData = [ { display: "区域", name: "QYYJ", newline: true, l ...

jquery 监听回车提交

//监听回车提交 $(document).keyup(function(event){ if(event.keyCode ==13){ if ($(".form-1").is(': ...

Linux下ifort的安装记录

首先进入网址https://software.intel.com/en-us/qualify-for-free-software/student 下载Intel Parallel Studio XE ...

angular4.0 路由守卫详解

在企业应用中权限.复杂页多路由数据处理.进入与离开路由数据处理这些是非常常见的需求. 当希望用户离开一个正常编辑页时,要中断并提醒用户是否真的要离开时,如果在Angular中应该怎么做呢? 其实Ang ...

大数据项目中的Oracle查询优化

今天发现自己之前写的一些SQL查询在执行效率方面非常不理想,于是尝试做了些改进. 需求为查询国地税表和税源表中,国税有而税源没有的条目数,之前的查询如下: SELECT COUNT(NAME) FRO ...

php闭包的使用实例

$childrenNodes = array_filter($list, function($item) use($parentId){ return $item->node_pid == $p ...

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值