开发者学堂课程【Python爬虫实战:Python 爬虫 AJAX 数据爬取和 HTTPS 访问】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/555/detail/7643
Python 爬虫 AJAX 数据爬取和 HTTPS 访问
内容简介
1.概述
2.爬虫分类
3.举例操作
一、概述
爬虫,应该称为网络爬虫,也叫网页蜘蛛。网络机器人、网络蚂蚁等
搜索引擎,也就叫做网络爬虫的应用者。
为什么今天,反而这词次被频繁提起?由搜索引擎不够吗
实际上,大数据时代到了,所有的企业都希望通过海量的数据发现其
中的价值。
所以,需要爬取对特定网站、特定类别的数据,二搜索引擎不能提供
这样的功能,因此,自己需要开发爬虫来解决。
二、爬虫分类
1、通用爬虫
常见的就是搜索引擎,无差别的收集数据、存储关键词,构建索引库,
给用户提供搜索接口
爬取的一般过程
(1)、初始一批 URL ,将这些 URL 放到待爬取队列
(2)、从队列取出这些 URL,将这些 URL,通过 DNS 解析 IP 对
应的站点下载 HTML 页面,保存到本地服务器中,爬取完的 URL 放
到已爬取队列
(3)、分析这些网页内容,找出网页里面的其他关心的URL连接,
继续执行第二步,直到爬取条件结束
搜索引擎如何获取一个新网站的 URL
新网站主动提交给搜索引擎
通过其它网站页面中设置的外链
通过其他网站设置的外链
搜索引擎和 DNS 服务商合作
2、聚焦爬虫
有针对性的编写特定领域数据的采集的爬虫,是面向主题的爬虫
Robots 协议
只一个 robot.txt 文件,告诉爬虫引擎什么可以爬取
淘宝
其它爬虫,不允许起取 User-Agent:
*Disallow./
这是一个君子协定,能亦有道这个协议为了让搜素引擎更有效率搜索
自己内容,提供了如 Sitemap 这样的文件。这个文件禁止抓取的往往
又是可能我们感兴题的内容,它反而泄露了这些地址。
3、HTTP 请求和响应处理
其实爬取网页就是通过 HTTP 协议访问网页,不过通过浏览器访问往
往是人的行为,把这种行为变成使用程序来访问。
urllib 包
Urllib 是标准库,它一个工具包模块,包含下面模块来处理 url :
·urllib.request 用于打开和读写
url·urllib.error 包含了由 urllib.request 引起的异常
·urllib.parse 用于解析 url
4、urllib.requet 模块
模块定义了在基本和摘要式身份验证、重定向、cookies 等应用中
打开 Url(主要是HTTP)的函数和类。
urlopen 方法
urlopen(ur1,data=None)url 是链接地址字符串,或请求对象。
data
提交的数据,如果 data 为 None 发起 GET 请求,否则发起 POST 请
求。
见 urllib.request.Request#get_method 返回 http.client.
HTTPResponse 类的响应对象,这是一个类文件对象。
代码如下
#下面的链接访问后会有跳转
response=urlopen('http://www.bing.com')#GET方法print
(response.closed)withresponse:
print(1,type(response))#http.client.HTTPResponse类文件对象
print(2,response.status,response.reason)#状态
print(3,response.getur1())#返回真正的URLprint
(4,response.info())#headersprint(5,response.read())#
读取返回的内容
print(response.closed)
上例,通过 urllib.request.urlopen 方法,发起一个 HTTP 的 GET
请求,WEB 服务器返回了网页内容。响应的数据被封装到类文件对
象中,可以通过 read 方法、readline 方法、readlines 方法获
取数据,status 和 reason 属性表示返回的状态码,info 方法返
回头信息,等等。
4、User-Agent 问题
上例的代码非常精简,即可以获得网站的响应数据。urlopen 方法
只能传递 url 和 data 这样的数据,不能构造 HTTP 的请求。例如
useragent. 源码中构造的 useragent 如下
#urllib.request.OpenerDirectorclassOpenerDirector:
Classdef_init_(self):
client_version=“Python-urllib/%s"%_version_self.addheaders
=[('User-agent'client_version)]R
当前显示为 Python-url1ib/3.6
有些网站是反爬虫的,所以要把爬虫伪装成浏览器。随便打开一个浏
览器,复制浏览器的 UA 值,用来伪装。
5、Request 类
Request(ur1,data=None,headers={})
初始化方法,构造一个请求
对象。可添加一个 header 的字典。data 参数决定是 GET 还是 POST
请求。add_header(key,val) 为 header 中增加一个键值对。
6、Urllib.parse 模块
该模块可以完成对 url 的编解码
先看一行代码,进行编码
从运行结果来看,冒号、斜杠、&、等号、问号等字符全部被编码
了,%实际是单字节十六进制表示的值。一般来说,url 中的地址部
分,一般不需要使用中文路劲,但是参数部分,不管是 GET 还是 POST
方法,提交的数据中可以有斜杠、,这样这些字符表示问号等符号,
而不是元字符。为了安全,一般会将一部分数据做URL处理,即不会
有太大的歧义。后来也可作代码,也可传送中文,一般按照字符集的
encoding 要求转变为十六进制字符串前加百分号即可。
7、post 网站
8、处理 Json 数据
查看“豆瓣电影”。寻找最近热门
三、发起 UCL
通过分析,我们知道这部分内容,是通过 AJAX 从后台拿到的 Json 数
据。访问 URL 是
https:
//movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%
AD%E9%97%A8&page_limit=50&page_start=0%E7%83%AD%E9%97%A8
服
务器返回的 Json 数据如下"
HTTPS 证书忽略
HTTPS 使用 SSL 安全套接层协议,在传输层对网络数据进行加密。
HTTPS 使用的时候需要证书,而证书需要 CA 认证。
CA(CertificateAuthority) 是数字证书认证中心的简称,是指发放、
管理、废除数字证书的机构。CA 是受信任的第三方,有 CA 签发的证
书具有可信性。如果用户由于信任了 CA 签发的证书导致的损失,可
以追究 CA 的法律责任。CA 是层级结构,下级 CA 信任上级 CA, 且有上
级 CA 颁发给下级 CA 证书并认证。
一些网站,例如淘宝,使用 HTTPS 加密数据更加安全。
爬虫成功
通过 HTTPS 访问 12306的时候,失败的原因在于12306的证书未通过
CA认证,它是自己生成的证书,不可信。而其它网站访问,如
https://ww.baidu.com/并没有提示的原因,它的证书的发行者受信
任,且早就存储在当前系统。