爬虫基本原理完全梳理及常用解析方式

什么是爬虫:即网络爬虫,可以理解为在网络上爬行的一只蜘蛛,互联网可以比喻为一张大网,一只蜘蛛在爬行时遇到了所需的资源就可以把它爬取下来。简单来说,爬虫就是请求网络并提取数据的自动化程序。

基本流程

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

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

解析内容:得到的内容是HTML,可以用正则表达式、网页解析库进行解析。Json,可以直接转化外Json对象解析。二进制数据,可以保存或者进一步处理(例如利用解析库转化为图片保存到本地)。

保存数据:结构化存储。保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式文件。

Request和Response

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

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

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

Request包含:

请求方式:主要GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等

POST构造表单,提交表单。GET在URL传参数

请求URL:URL(Uniform Resource Locator)全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一来确定

请求头:包含请求时的头部信息,如User-Agent、Host、Cookies等信息。保证可以正常合法访问页面

请求体:(POST方式)请求时额外携带的数据,如表单提交时的表单数据

Response包含:

响应状态:有多种响应状态,如200访问成功、301跳转、404找不到页面、500服务器错误等

响应头:如内容类型、内容长度、服务器信息、设置Cookie等等

响应体:最主要的部分,包含了请求资源的内,如网页的HTML、图片、二进制数据等信息

解析方式

直接处理:如果网页的格式和内容比较简单,取下来的数据就是简单的字符串,简单处理即可。

Json解析:有些网页通过Ajax来加载,所以可以通过字符串解析转化为Json对象来解析。

正则表达式:规则字符串把HTML中代码的相应文本提取出来,这种最常用。

BeautifulSoup、PyQuery、XPath具体使用看怎么方便怎么使用。

本文来自企鹅号 - 数据分析员媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏施炯的IoT开发专栏

Windows Phone SDK 7.1.1 Update正式版发布

     本次更新主要包含了对256M内存设备的支持,包含了256M设备的模拟器,并且更新了512M内存模拟器的版本。      安装此更新,是建立在WP SD...

20370
来自专栏张首富-小白的成长历程

CentOS6安装bash-compltion命令补全增强包

昨天帮一个朋友安装CentOS6的命令增强补全包bash-completion,通过扩展的yum源一直安装不上去,然后就想到先把rpm包下载下来在进行安装 先配...

20950
来自专栏我的博客

mac下mcrypt扩展解决

如果使用php自带的加密算法,其中需要这个mcrypt扩展,各种编译通不过。。后来干脆下在一个 【点击下载mcrypt.so】 然后修改 sudo vi /et...

29160
来自专栏JavaEdge

Spring Security权限框架理论与实战演练1 Spring Security权限管理框架介绍2 Spring Security常用权限拦截器讲解

本章首先让大家学习到Spring Security权限框架的架构,之后大家可以学习到Spring Security权限框架的核心概念,包括拦截器、数据库管理、缓...

28620
来自专栏一个爱瞎折腾的程序猿

初次尝试Linux并记录一二

若出现 服务器拒绝了SETP连接,但它监听FTP链接。。。没有安装sshd 解决方案

13710
来自专栏郭耀华‘s Blog

在linux ubuntu下搭建深度学习/机器学习开发环境

一、安装Anaconda 1.下载 下载地址为:https://www.anaconda.com/download/#linux ? ? 2.安装anacond...

47870
来自专栏运维

DNS服务器(五):使用queryperf对DNS服务器作压力测试

   当我们把DNS服务器配置好后,我们肯定会想测试一下DNS服务器的性能如何,上线后如果请求数够多服务器还能否响应?于是,我们可以使用软件模拟环境,对DNS...

52930
来自专栏不想当开发的产品不是好测试

Vue.js 入门

背景 为了学习spring,准备写一个通讯录demo,实现增删改查功能。 前端页面同事推荐用vue.js,因为简单快速,当然前提是基于你对前端的html,css...

34750
来自专栏python爬虫实战之路

CentOS7.0安装/卸载MySQL

在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/

17120
来自专栏java系列博客

【redis】安装与运行:Creating Server TCP listening socket 127.0.0.1:6379: bind: No error

77450

扫码关注云+社区

领取腾讯云代金券