爬虫基本原理
-
什么是爬虫?
请求网站并提取数据的自动化程序。
(写代码模拟浏览器向服务器发送请求,然后获取网络资源。一般来说获取到的网络资源是一段html代码,包含html标签还有在浏览器中看到的一些文字。要提取的数据就包含在html文本里。我们要做的就是从这个文本里提取出我们想要的信息。提取出来之后存储。) -
网页查看
打开一个网页,右键鼠标,显示Elements是网页的源代码。
-
爬虫的基本流程
1、发起请求
通过http库向目标站点发起请求,发送一个Request,请求可以包含额外的headers等的信息,等待服务器响应。
2、获取响应内容
服务器正常响应的话会得到一个reponse,reponse的内容便是所要获取的页面的内容,类型可能是HTML、json字符串,二进制数据如图片视频等。
3、解析网页内容
得到的内容可能是HTML格式可以用正则表达式、网页解析库进行解析。可能是json格式,可以直接转为json对象解析,可能是二进制数据,可以保存做进一步处理。
4、保存数据
保存成文本也可以存到数据库,或者保存为特定格式。
- Request
1、请求方式
使用get请求方式,请求内容包含在url里。
使用post请求,请求参数不在url里面,请求体在新的fromdata里,url里不包含信息
2、统一资源定位符url
一个图片、一个视频都可以用url唯一指定。
3、请求头
包含比较重要的配置信息。如user-agent、host、cookies等信息。
4、请求体,get形式没有请求体。
post以fromdata形式提交请求体。
- Reponse
1、响应状态
状态码:
200正常
301以上跳转
404找不到资源
502以上,服务器处理错误
2、响应头
键值对的Reponse Headers
如内容类型、内容长度、服务器信息、设设置cookies等等。
3、响应体
最主要的部分,包含了请求资源的内容,如网页HTML,图片,二进制数据等。
-
能抓怎样的数据?
1、网页文本如HTML、Json等
2、图片、视频是二进制文件,保存为图片格式。 -
怎样来解析?
1、直接处理
网页是简单的字符串
2、Json解析(json格式的字符串)结构化的数据,通过ajex进行加载的。
3、正则表达式
4、beautifulsoup解析库进行解析
5、pyquery库
6、XPath库
-
为什么抓到的数据和浏览器的数据不一样呢?
用库和用浏览器拿到不一样的源代码。 -
怎样解决js的渲染问题
1、分析Ajax请求(返回jason格式字符串)
2、使用selenium/webdriver模拟js渲染
3、Splash
- 怎样保存数据?
1、纯文本
2、保存到关系型数据库,结构化的数据,每一条数据都有统一的字段。
mysql、oracle、sql server
3、非关系型数据库
key-value形式,列表形式的结构。
4、二进制文件,保存成特定格式。