姬長信(Redy)

爬虫的基本原理

#/uf9fd么是爬/u2f8d 请求/u2f79网站并提取数据的/u2f83自动化程序 # 爬虫的基本流程 步骤一/uff1a爬/u2f8d向/u2f6c标服务器发起 HTTP 请求 步骤二/uff1a/u2f6c标服务器返回响应结果 步骤三/uff1a爬/u2f8d客户端收到响应并从中提取数据/uff0c再进/u2f8f数据清洗、数据存储/u2f2f作 #HTTP的请求和响应 ##HTTP请求 当浏览器向Web服务器发出请求时/uff0c它向服务器传递了一个数据块/uff0c也就是请求信息/uff0cHTTP请求信息由3部分组成/uff1a l 请求协议 l 请求头(Request Header) l 请求正文 下面是一个HTTP请求的例子/uff1a ![](https://cocosbcx.oss-cn-beijing.aliyuncs.com/article/201909181157245124) ## 发起请求 通过HTTP库向/u2f6c目标站点发起请求/uff0c即发送/u2f00个Request/uff0c请求可以包含额外的headers等信息/uff0c等待服务器响应。 获取相应内容 如果服务器/ufa38能正常响应/uff0c会得到/u2f00一个Response/uff0cResponse的内容/uf965是所要获取的/u2eda面内容/uff0c类型可能有HTML/uff0cJson字符串/uf905/uff0c/u2f06二进制数据/uff08如图片视频/uff09等类型。 解析内容 得到的内容可能是HTML/uff0c可以/u2f64用正则表达式、/u2f79页解析库进/ufa08解析。可能是Json/uff0c可以直接转为Json对象解析/uff0c可能是二进制数据/uff0c可以做保存或者进一步的处/uf9e4。 保存数据 保存形式多样/uff0c可以存为/u2f42文本/uff0c也可以保存至数据库/uff0c或者保存特定格式的文件。 Request与Response /uff081/uff09浏览器就发送消息给该/u2f79网址所在的服务器/uff0c这个过程叫做HTTP Request。 /uff082/uff09服务器收到浏览器发送的消息后/uff0c能够根据浏览/ufa38发送消息的内容/uff0c做相应处理/uff0c然后把消息回传给浏览/ufa38。这个过程叫做HTTP Response。 /uff083/uff09浏览器收到服务器的Response信息后/uff0c会对信息进行相应处理/uff0c然后展示。 Request中包含/uf9fd么 请求方式 主要有GET、POST两种类型/uff0c另外还有HEAD、PUT、DELETE、OPTIONS等。 请求URL URL全称统一资源定位符/uff0c如一个网页文档、一张图片、一个视频等都可以用URL唯一来确定。 请求头 包含请求时的头部信息/uff0c如User-Agent、Host、Cookies等信息。 请求体 请求时额外携带的数据/uff0c如表单提交时的表单数据 Response中包含什么 响应状态 有多种响应状态/uff0c如200代表成功、301跳转、404找不到页面、502服务器错误 响应头 如内容类型、内容长度、服务器信息、设置Cookie等等。 响应体 最主要的部分/uff0c包含了请求资源的内容/uff0c如网页HTML、图片二进制数据等。 能抓怎样的数据 网页文本/uff1a如HTML文档、Json格式文本等。 图片/uff1a获取到的是二进制文件/uff0c保存为图片格式。 视频/uff1a同为二进制文件/uff0c保存为视频格式即可。 其他/uff1a只要是能请求到的/uff0c都能获取。 怎样来解析 直接处理 Json解析 正则表达式 BeautifulSoup XPath PyQuery 怎样保存数据 文本/uff1a纯文本、Json、Xml等。 关系型数据库/uff1a如MySQL、Oracle、SQL Server等具有结构化表结构形式存储。 关系型数据库/uff1a如MongoDB、Redis等Key-Value形式存储。 二进制文件/uff1a如图/u2f5a片、视频、音频等直接保存成特定格式即可。