python爬虫-1-爬虫概述

爬虫概述

爬虫就是获取网页提取保存信息自动化程序

爬虫基本原理

  • 获取网页
    • 获取网页,就是获取网页的源代码
    • 源代码中包含网页的部分有用信息,将源代码获取下来,就可以从中提取所需信息
    • 最关键的部分是构造一个请求并发送个服务器接收响应并解析
  • 提取信息
    • 根据网页的结构
    • 存在根据网页节点属性,CSS选择器或XPath提取网页信息的库
    • 例: Beautiful Souppyquerylxml
    • 利用这些库可以快速高效地从中提取网页信息
  • 保存信息
    • 保存为TXT文本或JSON文本
    • 保存到数据库,如MySQLMongoDB
    • 保存至远程服务器,如借助SFTP进行操作
  • 自动化程序
    • 当数据量非常大或者操作非常繁复时, 需要借助程序
    • 爬虫就是代替我们工作的自动化程序
    • 可以在抓取过程中进行各种异常处理, 错误重试等操作确保爬虫高效运行
  • 抓取的数据
    • 常规网页–HTML代码
    • API–JSON字符串
    • 多媒体文件
    • 只要能在浏览器里能访问到, 都可以抓取

而如今更多网页采用Ajax,前端模块化工具来构建,整个网页可能都是由JavaScript渲染出来的,原始的HTML代码就是一个空壳

如下:

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>This is a Demo</title>
</head>
<body>
<div id="container">
</div>
</body>
<script src="app.js"></script>
</html>

浏览器解析网页时,会加载HTML内容,然后请求app.js文件并执行代码,JS文件会改变HTML中的节点并向网页添加内容,最后得到完成的页面。

而用urlib或者request库去请求网页时,只会加载HTML文件,而不会执行JavaScript,所以我们只能得到一个空壳,而无法得到完整页面。

可以使用SeleniumSplash类似的库来模拟JavaScript渲染。

基础探究,SessionCookies

### 静态网页动态网页

  • 静态网页
    • 静态网页由HTML代码编写,文字图片等内容均通过写好的HTML代码指定
    • 加载速度快,编写简单
    • 但是可维护性差,不能灵活多变地显示内容、个性化定制等
  • 动态网页
    • 动态解析URL中参数的变化
    • 关联数据库并动态呈现不同的页面内容,灵活多变
    • 可以能由JSPPHPPython等语言编写
    • 可以实现用户登录和注册的功能

SessionCookies

HTTP具有无状态的特点,是指HTTP协议对事务处理是没有记忆能力的,也就是说服务器并不知道客户端是什么状态。这就意味着如果后续要处理前面的信息,必须重传。这将导致需要额外传递一些前面的重复请求,才能获取后续响应。降低传输效率。

所以,我们需要能够保持HTTP链接状态的技术——SessionCookies

  • Session

    • 网站的服务器
    • “有始有终的一系列动作/消息”
    • 存储特定用户Session所需的属性和配置信息
  • Cookies

    • 浏览器端
    • 某些网站为了辨别用户身份、继续Session跟踪而储存在用户本地终端上的数据
    • 下次放问网页时会自动附带并发给服务器
    • 服务器会识别Cookies并鉴定出用户并判断用户状态
  • 会话Cookie,将Cookie放在浏览器内存里,浏览器关闭后该Cookie失效

  • 持久Cookie,将Cookie保存到客户端的硬盘中,下次还可以继续使用,用于长久保持用户的登录状态

严格来说,并没有会话Cookie持久Cookie之分,只是由CookieMax AgeExpires字段决定了过期的时间。