爬虫知识简单梳理
文章目录
1.分类
- 通用爬虫(百度、Google等搜索引擎:大而广)
- 聚焦爬虫(特定需求的爬取:爬取筛选需求数据)
2.模拟浏览器请求数据(常用)
- requests模块API链接
- 核心:response =
requests.request()
- 衍生:
requests.get()
requests.post()
requests.head()
requests.put()
requests.patch()
requests.delete()
- session
- ssion =
requests.session()
#创建含session对象,其他请求不变。
- ssion =
- 返回内容response
response.text
response.content
# 字节流response.encoding
response.aparent_encoding
传过来的数据的原编码格式。一般设置为response.encoding = response.aparent_encoding
response.status_code
response.cookies.get_dict()
response.url
response.body
response.meta = {'depth':'深度值'}
#用于在不同请求间传递数据(如上一个parse解析过后,可以通过meta参数,由下个方法的meta对象,进行提取)
- 核心:response =
3.数据提取
- 非结构化数据提取
- 文本、电话号码、邮箱
- 正则
- HTML文件
- 正则
- XPath
- CSS选择器
- 文本、电话号码、邮箱
- 结构化数据提取
- JSON文件
- json path
- 转化成Python类型进行操作(json类)
- XML文件
- 转化成Python类型(xmltodic)
- XPath
- CSS选择器
- 正则
- JSON文件
XML和HTML区别
数据格式 | 描述 | 设计目标 |
---|---|---|
XML | Extensible Markup Language (可扩展标记语言) | 被设计为传输和存储数据,其焦点是数据的内容。 |
HTML | HyperText Markup Language (超文本标记语言) | 显示数据以及如何更好显示数据。 |
HTML DOM | Document Object Model for HTML (文档对象模型) | 通过 HTML DOM,可以访问所有的 HTML 元素,连同它们所包含的文本和属性。可以对其中的内容进行修改和删除,同时也可以创建新的元素。 |
a. 正则(re模块)
b. Beautiful Soup4模块API链接
lxml 只会局部遍历,而Beautiful Soup 是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml。
BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器、Python标准库中的HTML解析器,也支持 lxml 的 XML解析器。
c.XPath、lxml类库
正则、beautifulsoup、lxml对比
抓取工具 | 速度 | 使用难度 | 安装难度 |
---|---|---|---|
正则 | 最快 | 困难 | 无(内置) |
BeautifulSoup | 慢 | 最简单 | 简单 |
lxml | 快 | 简单 | 一般 |
d. JSON与JsonPATH
- JSON模块
json.loads()
把Json格式字符串解码转换成Python对象json.dumps()
实现python类型转化为json字符串json.load()
读取文件
中json形式的字符串元素 转化为python类型json.dump()
将Python内置类型序列化为json对象后写入文件
chardet
优秀的编码识别模块
- JsonPath
- 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java
- API_DOC
编码问题:
decode的作用是将其他编码的字符串转换成 Unicode 编码
encode的作用是将 Unicode 编码转换成其他编码的字符串
一句话:UTF-8是对Unicode字符集进行编码的一种编码方式
4.动态HTML处理
那些使用了 Ajax 或 DHTML 技术改变 / 加载内容的页面,可能有一些采集手段。但是用 Python 解决这个问题只有两种途径:
1.直接从 JavaScript 代码里采集内容(费时费力)
2.用 Python 的 第三方库运行 JavaScript,直接采集你在浏览器里看到的页面(这个可以有)。
方式一(模拟浏览器登录):
a.Selenium
浏览器指令模块
- Selenium 可以根据我们的指令,让浏览器自动加载页面(但不包含浏览器),获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
- api_doc
b.PhantomJS
无界面浏览器
方式二(构建具体请求信息):
- 构建具体的http信息,携带cookie、请求头等具体信息,进行发送请求,实现登录等功能。
5.机器图像识别
OCR(Optical Character Recognition, OCR)光学文字识别
Tesseract
库(Google开源OCR库)