爬虫原理
什么是爬虫
爬虫是请求网站提取数据的自动化程序
关键点:1.发送请求(HTTP请求)2.获取服务器响应的内容(HTML代码,Json字符串,二进制数据等)3.解析内容4.保存数据
发送请求
我们在向服务器端发送的Request中包含哪些东西呢?
- 请求方式:主要是GET和POST两种请求方法,还有一些HEAD,PUT,DELETE等等。
- 请求URL:URL的全程是统一资源定位符,一个网页文档,一个视频,一张图片都可以由此确定,浏览器在渲染网页过程中会使用到URL。
- 请求头:包含了一些请求时需要的配置信息,比如User-Agent,Cookies等等.服务器会依据这些信息来判断请求是否合法
- 请求体:在做POST请求时会需要请求体这一部分,以键值对的形式发送。
服务器响应
Response中包含哪些内容:
- 状态码(标识响应状态):200(请求成功),404(请求的资源不存在),301(重定位),502(服务器处理错误)
- 响应头:保存内容类型,内容长度,服务器信息,设置cookie等等.
- 响应体:最主要部分,包含了请求的资源,比如图片,网页源代码等等.
解析内容
可以通过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 () 匹配括号内的表达式,也表示一个组