爬虫知识梳理

爬虫知识简单梳理

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对象,其他请求不变。
    • 返回内容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对象,进行提取)

3.数据提取

  • 非结构化数据提取
    • 文本、电话号码、邮箱
      • 正则
    • HTML文件
      • 正则
      • XPath
      • CSS选择器
  • 结构化数据提取
    • JSON文件
      • json path
      • 转化成Python类型进行操作(json类)
    • XML文件
      • 转化成Python类型(xmltodic)
      • XPath
      • CSS选择器
      • 正则

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

API_DOC
json在线解析

  • 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 无界面浏览器

  • 是个无界面的浏览器软件,需要下载
  • api_doc
  • 通过selenium来调用PhantomJS实现对应操作。

方式二(构建具体请求信息):

  • 构建具体的http信息,携带cookie、请求头等具体信息,进行发送请求,实现登录等功能。

5.机器图像识别

OCR(Optical Character Recognition, OCR)光学文字识别

Tesseract库(Google开源OCR库)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章