爬虫概述
爬虫就是获取网页并提取和保存信息的自动化程序。
爬虫基本原理
- 获取网页
- 获取网页,就是获取网页的源代码
- 源代码中包含网页的部分有用信息,将源代码获取下来,就可以从中提取所需信息
- 最关键的部分是构造一个请求并发送个服务器,接收响应并解析
- 提取信息
- 根据网页的结构
- 存在根据网页节点属性,CSS选择器或XPath提取网页信息的库
- 例:
Beautiful Soup,pyquery,lxml等 - 利用这些库可以快速高效地从中提取网页信息
- 保存信息
- 保存为
TXT文本或JSON文本 - 保存到数据库,如
MySQL和MongoDB等 - 保存至远程服务器,如借助
SFTP进行操作
- 保存为
- 自动化程序
- 当数据量非常大或者操作非常繁复时, 需要借助程序
爬虫就是代替我们工作的自动化程序- 可以在抓取过程中进行各种异常处理, 错误重试等操作确保爬虫高效运行
- 抓取的数据
- 常规网页–
HTML代码 - API–
JSON字符串 - 多媒体文件
- 只要能在浏览器里能访问到, 都可以抓取
- 常规网页–
而如今更多网页采用Ajax,前端模块化工具来构建,整个网页可能都是由JavaScript渲染出来的,原始的HTML代码就是一个空壳。
如下:
1 |
|
浏览器解析网页时,会加载HTML内容,然后请求app.js文件并执行代码,JS文件会改变HTML中的节点并向网页添加内容,最后得到完成的页面。
而用urlib或者request库去请求网页时,只会加载HTML文件,而不会执行JavaScript,所以我们只能得到一个空壳,而无法得到完整页面。
可以使用Selenium、Splash类似的库来模拟JavaScript渲染。
基础探究,Session与Cookies
### 静态网页和动态网页
- 静态网页
- 静态网页由
HTML代码编写,文字图片等内容均通过写好的HTML代码指定 - 加载速度快,编写简单
- 但是可维护性差,不能灵活多变地显示内容、个性化定制等
- 静态网页由
- 动态网页
- 动态解析
URL中参数的变化 - 关联数据库并动态呈现不同的页面内容,灵活多变
- 可以能由
JSP、PHP、Python等语言编写 - 可以实现用户登录和注册的功能
- 动态解析
Session与Cookies
HTTP具有无状态的特点,是指HTTP协议对事务处理是没有记忆能力的,也就是说服务器并不知道客户端是什么状态。这就意味着如果后续要处理前面的信息,必须重传。这将导致需要额外传递一些前面的重复请求,才能获取后续响应。降低传输效率。
所以,我们需要能够保持HTTP链接状态的技术——Session和Cookies。
-
Session- 网站的服务器
- “有始有终的一系列动作/消息”
- 存储特定用户
Session所需的属性和配置信息
-
Cookies- 浏览器端
- 某些网站为了辨别用户身份、继续
Session跟踪而储存在用户本地终端上的数据 - 下次放问网页时会自动附带并发给服务器
- 服务器会识别
Cookies并鉴定出用户并判断用户状态
-
会话Cookie,将Cookie放在浏览器内存里,浏览器关闭后该Cookie失效 -
持久Cookie,将Cookie保存到客户端的硬盘中,下次还可以继续使用,用于长久保持用户的登录状态
严格来说,并没有会话Cookie和持久Cookie之分,只是由Cookie的Max Age或Expires字段决定了过期的时间。