Bootstrap

Python爬虫原理与常用模块——urllib与反爬策略

1 http协议

1.1 简介

1.HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。

2.HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

1.2 工作原理

  1. HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

  2. Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。

  3. Web服务器根据接收到的请求后,向客户端发送响应信息。

  4. HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

HTTP三点注意事项:

  1. HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  2. HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

  3. HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

  4. 以下图表展示了HTTP协议通信流程:

1.3 参数详解

关键字 说明
Request URL 请求的URL地址
Request Method 请求方法
Status Code 状态码
Remote Address 远端地址
Connection 连接类型
Content-Encoding 数据压缩方式 常用压缩算法: Content-Encoding:gzip Content-Encoding:compress Content-Encoding:deflate Content-Encoding:identity Content-Encoding:br
Content-Type 互联网媒体类型 text/html HTML格式 text/plain: 文本格式 text/xml: XML格式 image/gif: gif图片格式 image/jpeg: jpg图片格式 image/png: png图片格式 application/xhtml+xml: XHTML格式 application/xml:XML数据格式 application/atom+xml Atom XML聚合格式 application/json JSON数据格式 application/pdf: pdf格式 application/msword: Word文档格式 application/octet-stream 二进制流数据(例如文件下载)application/x-www-form-urlencoded: 普通表单提交 multipart/form-data 表单文件上传
Accept 发送端希望接受的数据类型
text() 文本内容
User-Agent Agent 用户代理
Accept-Encoding 发送端支持的压缩算法
Cookie Cookie
Accept-Language 发送端支持的语言
Cache-Control 缓存机制

2 网络基础爬虫

2.1 简介

  1. 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

  2. 其实通俗的讲就是通过程序去获取web页面上自己想要的数据,也就是自动抓取数据

2.2 用途

可以抓取到 任何你想要抓取的内容,前提是你的浏览器访问得到,

2.3 本质

爬虫的本质就是模拟浏览器打开网页,获取网页中我们想要的那部分数据。

浏览器打开网页的过程:

1、在浏览器的输入地址栏,输入想要访问的网址。

2、经过DNS服务器找到服务器主机,向服务器发送一个请求

3、服务器经过解析处理后返回给用户结果(包括html,js,css文件等等内容)

4、浏览器接收到结果,进行解释通过浏览器屏幕呈现给用户结果

上面我们说了爬虫的本质就是模拟浏览器自动向服务器发送请求,获取、处理并解析结果的自动化程序。

爬虫的关键点:模拟请求,解析处理,自动化。

2.4 基本流程

2.4.1 发起请求

通过HTTP库向目标站点发起请求(request),请求可以包含额外的header等信息,等待服务器响应

2.4.2获取响应内容

如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型

2.4.3 解析内容

得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理

2.4.4 保存数据

保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件

2.5 urllib

2.5.1简介

  1. 在Python2版本中,有urllib和urlib2两个库可以用来实现request的发送。

  2. 而在Python3中,已经不存在urllib2这个库了,统一为urllib。

  3. Python3 urllib库官方链接:https://docs.python.org/3/library/urllib.html

  4. 常用模块:

    • urllib.request打开和浏览url中内容

    • urllib.parse解析url

2.5.2 urllib.request

2.5.2.1 简介

urllib.request 模块提供了最基本的构造 HTTP请求方法,可以模拟浏览器的一个请求发起过程。同时它还带有处理authenticaton(授权验证),redirections(重定向),cookies(浏览器Cookies)以及其它内容。

2.5.2.2 urllib.reques
;