# coding=utf-8
'''
Created on 2019年03月18日
@author: quqiao
第一课：爬虫原理
'''

# 爬虫的基本流程
# 1）发起请求：发起HTTP库向目标站点发起请求，也就是发送一个request，请求可以包含额外的header等信息，等待服务器响应
# 2）获取响应内容：如果服务器能正常响应，会得到一个response，Response的内容便是所要获取的页面内容，类型可能是HTML,Json
#    字符串，二进制数据（图片或者视频）等类型
# 3）解析内容：得到的内容可能是HTML，可以用正则表达式，页面解析库进行解析，可能是Json,可以直接转换为Json对象解析，可能
#    是二进制数据，可以做保存或者进一步处理
# 4）保存数据：保存形式多样，可以存为文本，也可以保存到数据库，或者保存特定格式的文件


# 什么是Request?
# 1）请求方式：GET/POST两种类型常用，另外有HEAD/PUT/DELETE/OPTIONS
#    GET和POST的区别就是：请求的数据GET是在url中，POST则存放在头部
#    GET：向指定的资源发出“显示”请求，使用GET方法应该只用在读取数据
#    POST：向指定的资源提交数据，请求服务器进行处理。数据被包含在请求的文本中。这个请求可能会创建新的资源或修改现有的资源
#    HEAD：与GET方法一样，都是向服务器发出指定资源的请求。只不过服务器将不传回资源的文本部分
#    PUT：向指定资源位置上传其最新内容
#    OPTIONS：这个方法可使服务器传回该资源所支持的所有HTTP请求方法
#    DELETE：请求服务器删除Request-URI所标识的资源
# 2）请求URL：统一资源定位符，也就是说的网址
#    URL的格式由三个部分组成：
#    第一部分：协议（或成为服务方式）
#    第二部分：存有该资源的主机IP地址（有时也包括端口号）
#    第三部分：主机资源的具体地址，如目录和文件名等
#    爬虫爬取数据时必须要有一个目标的URL才可以获取数据
# 3）请求头：包含请求时的头部信息，如User-Agent,Host,Cookies等信息
# 4）请求体：请求是携带的数据，如提交表单数据时候的表单数据（POST）


# 什么是Response?
# 所有HTTP响应的第一行都是状态行，一次是当前HTTP版本号，3位数据组成的状态代码，以及描述状态的短语，彼此由空格分隔
# 1）响应状态：
#    1xx消息---请求已被服务器接收，继续处理
#    2xx成功---请求已成功被服务器接收，理解，并接受
#    3xx重定向---需要后续操作才能完成这一请求
#    4xx请求错误---请求含有词法错误或者无法被执行
#    5xx服务器错误---服务器在处理某个正确请求时发生错误
# 2）响应头：如内容类型，类型的长度，服务器信息，设置Cookie
# 3）响应体：最主要的部分，包含请求资源的内容，如网页HTML,图片，二进制数据


# 能爬取什么样的数据
# 1）网页文本：如HTML文档，Json格式化文本等
# 2）图片：获取到的是二进制文件，保存为图片格式
# 3）视频：同样是二进制文件
# 4）其他：只要请求到的，都可以获取


# 如何解析数据：
# 1）直接处理
# 2）Json解析
# 3）正则表达式处理
# 4）BeautifulSoup解析处理
# 5）PyQuery解析处理
# 6）XPath解析处理

# 怎样保存数据
# 1）文本：纯文本，Json，Xml等
# 2）关系型数据库：MySql,Oracle等
# 3）非关系型数据库：MongoDB,Redis等
