python爬虫---爬虫的数据解析的流程和解析数据的几种方式

时间:2024-01-17 23:29:26

python爬虫---爬虫的数据解析的流程和解析数据的几种方式

一丶爬虫数据解析

概念:将一整张页面中的局部数据进行提取/解析

作用:用来实现聚焦爬虫的吧

实现方式:

正则 (针对字符串)

bs4

xpath (最常用)

pyquery   " https://www.jianshu.com/p/770c0cdef481"  # 有待查询

数据解析的通用原理是什么?

标签的定位

数据的提取

页面中的相关的字符串的数据都存储在哪里呢?

标签中间

标签的属性中

基于聚焦爬虫的编码流程

1. 指定url

2. 发起请求

3. 获取响应数据

4. 数据解析

5. 持久化存储

正则解析

### 使用python中的re模块进行正则匹配,对找到的指定数据进行数据解析

    # 例如:
# text获取页面内容.
page_text = requests.get(url,headers=headers).text # 解析数据:img标签的src的属性值
ex = '<div class="text">.*?<img src="(.*?)" referrerPolicy.*?</div>' # ex 是正则表达式,page_text是获取的页面,flags=re.S表示不换行(一行查找,正则表达式会将这个字符串作为一个整体,在整体中进行匹配)
img_src_list = re.findall(ex,page_text,re.S)

BS4解析

# 概述BS4的用法
# 环境的安装:
pip install bs4
pip install lxml # bs4的解析原理:
实例化一个BeautifulSoup的一个对象,把即将被解析的页面源码数据加载到该对象中
需要调用BeautifulSoup对象中的相关的方法和属性进行标签定位和数据的提取 # BeautifulSoup的实例化
BeautifulSoup(fp,'lxml'):将本地存储的html文档中的页面源码数据加载到该对象中
BeautifulSoup(page_text,'lxml'):将从互联网中请求道的页面源码数据加载到改对象中 # 标签的定位
标签定位:soup.tagName:只可以定位到第一个tagName标签 属性定位:soup.find('tagName',attrName='value'),只可以定位到符合要求的第一个标签
# findAll:返回值是一个列表。可以定位到符合要求的所有标签
选择器定位:soup.select('选择器')
# 选择器:id,class,tag,层级选择器(大于号表示一个层级,空格表示多个层级) # 取文本
text:将标签中所有的文本取出
string:将标签中直系的文本取出 # 取属性
tag['attrName']

XPATH解析

# 概述
# 环境的安装
pip install lxml # 解析原理
实例化一个etree的对象,且把即将被解析的页面源码数据加载到该对象中
调用etree对象中的xpath方法结合这不同形式的xpath表达式进行标签定位和数据提取 # etree对象的实例化
etree.parse('fileName')
etree.HTML(page_text) # 标签定位
最左侧的/:一定要从根标签开始进行标签定位 非最左侧的/:表示一个层级 最左侧的//:可以从任意位置进行指定标签的定位 非最左侧的//:表示多个层级 属性定位://tagName[@attrName="value"] 索引定位://tagName[@attrName="value"]/li[2],索引是从1开始 逻辑运算:
找到href属性值为空且class属性值为du的a标签
//a[@href="" and @class="du"]
模糊匹配:
//div[contains(@class, "ng")]
//div[starts-with(@class, "ta")] # 取文本
/text():直系的文本内容
//text():所有的文本内容 # 取属性
/@attrName

其他问题

# 乱码问题
# 1. 先编码成 iso-8895-1 在解码
img_name = img_name.encode('iso-8859-1').decode('gbk') # .bs4实现的数据解析中常用的方法和属性有哪些?各自的作用是什么?
soup.tagName
find/findAll()
select()
text/string
tag['attrName] # .写出常用的xpath表达式?
属性定位
索引定位
取文本
取属性