python爬虫解析数据

328次阅读
没有评论

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 = '

.*? python爬虫解析数据'

# 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表达式?

属性定位

索引定位

取文本

取属性

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-27发表,共计1835字。
新手QQ群:570568346,欢迎进群讨论 Python51学习