huolong blog

爬虫原理

什么是爬虫

爬虫是请求网站提取数据的自动化程序 关键点:1.发送请求(HTTP请求)2.获取服务器响应的内容(HTML代码,Json字符串,二进制数据等)3.解析内容4.保存数据

发送请求

我们在向服务器端发送的Request中包含哪些东西呢?

  1. 请求方式:主要是GET和POST两种请求方法,还有一些HEAD,PUT,DELETE等等。
  2. 请求URL:URL的全程是统一资源定位符,一个网页文档,一个视频,一张图片都可以由此确定,浏览器在渲染网页过程中会使用到URL。
  3. 请求头:包含了一些请求时需要的配置信息,比如User-Agent,Cookies等等.服务器会依据这些信息来判断请求是否合法
  4. 请求体:在做POST请求时会需要请求体这一部分,以键值对的形式发送。

服务器响应

Response中包含哪些内容:

  1. 状态码(标识响应状态):200(请求成功),404(请求的资源不存在),301(重定位),502(服务器处理错误)
  2. 响应头:保存内容类型,内容长度,服务器信息,设置cookie等等.
  3. 响应体:最主要部分,包含了请求的资源,比如图片,网页源代码等等.

解析内容

可以通过JSON解析,正则表达式解析,利用python解析库来进行解析

为什么抓取的数据和浏览器中看到的不一样呢?

浏览器会将拿到的数据进行渲染,故会有很大不同,为了解决这一问题,我们可以分析Ajax请求,利用webdriver等库来自动化操作浏览器,调用splash库来进行js渲染等.

保存数据

可以存取为纯文本,图片,音视频,或者存到数据库中

什么是正则表达式

正则表达式是对字符串操作的一种逻辑公式,由普通字符(例如字符a到z)以及特殊字符(称为"元字符")组成文字模式,模式描述在搜索文本时要匹配的一个或多个字符串,正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

正则表达式在爬虫编写中的作用

通过正则表达式提取出网页中的有用信息,是爬虫程序最原始最灵活的写法,后续衍生出了无穷多的变体.

常见匹配模式

\w 匹配字母数字及下划线 \W 匹配非字母数字下划线 \s 匹配空白字符,等价于[\t\n\r\f] \S 匹配非空白字符 \d 匹配数字,等价于[0-9] \D 匹配任意非数字 ^ 匹配字符串的开头 $ 匹配字符串的末尾 . 匹配任意除换行符以外的字符 […] 匹配中括号中包含的字符 [^…] 匹配除中括号包含的字符以外的任意字符

  • 匹配0个或多个表达式,贪婪匹配
  • 匹配1个或多个表达式,贪婪匹配 ? 匹配0个或者1个字符,非贪婪匹配 {n} 匹配n个前面的表达式. {n,m} 匹配n次到m次前面的表达式,贪婪匹配 a|b 匹配a或b () 匹配括号内的表达式,也表示一个组