爬虫是什么
网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。—— 百度百科
必备基础知识
- Python基础语法学习
- HTML 页面内容抓取
- HTML 页面数据提取
- 指定要求格式的数据存储(主要是mysql,redis,mongodb数据库的存储)
- Scrapy框架以及scrapy-redis分布式策略(第三方框架)
通用爬虫和聚焦爬虫
通用爬虫
通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
聚集爬虫
聚焦爬虫是"面向特定主题需求"的一种网络爬虫程序。
它与通用搜索引擎爬虫的区别在于:聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。
HTTP 和 HTTPS
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是一个应用层协议,由请求和响应构成,是一个标准的个客户端和服务器模型.它的主要特点如下:
- 支持客户端/服务器模型
- 简单快速
- 灵活
- 无连接
- 无状态
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。
SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全。
- HTTP的端口号为80,
- HTTPS的端口号为443
当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。
当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器。
浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。
GET是从服务器上获取数据,POST是向服务器传送数据
GET请求参数显示,都显示在浏览器网址上,HTTP服务器根据该请求所包含URL中的 参数来产生响应内容,即“Get”请求的参数是URL的一部分。例如: http://www.baidu.com/s?wd=Chinese
POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用 来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等), 请求的参数包含在“Content-Type”消息头里,指明该消息体的媒体类型和编码
状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code。
下面是常见的HTTP状态码:
- 2XX - 请求成功
- 3XX - 资源(网页等)被永久转移到其它URL
- 4XX - 请求的资源(网页等)不存在
- 5XX - 内部服务器错误
具体状态码请查看 -> 点这里
Cookie 和 Session
服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。
Cookie:通过在客户端记录的信息确定用户的身份。
Session:通过在服务器端记录的信息确定用户的身份。
Requests模块
Urllib和requests模块是发起http请求最常见的模块。
虽然Python的标准库中 urllib 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。
Requests 继承了urllib的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
Requests的底层实现其实就是 urllib3(urllib2的升级版—python2支持)
Requests的文档非常完备,中文文档也相当不错。Requests能完全满足当前网络的需求,支持Python 2.6—3.6.