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表达式?
属性定位
索引定位
取文本
取属性

python爬虫---爬虫的数据解析的流程和解析数据的几种方式的更多相关文章

  1. Log4j源码解析--框架流程+核心解析

    OK,现在我们来研究Log4j的源码: 这篇博客有参照上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/06/28/381667.htm ...

  2. 在Python中反向遍历序列(列表、字符串、元组等)的五种方式

    1. reversed() a = [1, 2, 3, 4] for i in reversed(a): print(i) 2. range(len(a)-1, -1, -1) a = [1, 2, ...

  3. Repeater 控件 当数据源没有数据的时候显示 暂无数据 的两种方式

    第一种:现在前台给Repeater控件外面的div加一个runat=”server”  然后在cs后台判断数据源是否为空, 是的话就修改这个前台div的InnerText或者是InnerHtml 即可 ...

  4. 【TP3.2 + 其他任何PHP框架】编辑、删除、添加数据,返回原分页 (ajax+form两种方式提交均可以)

    1.目的1:在如下的一个页面中,p=2,比如我们删除数据id=13,通过ajax提交{id,p} 这2个参数,就可以了,页面返回json的url参数中原样带上p即可. 2.目的2: 步骤1:在如下页面 ...

  5. Python 35 线程(1)线程理论、开启线程的两种方式

    一:线程理论 1 什么是线程 进程其实一个资源单位,而进程内的线程才是cpu上的执行单位 线程其实指的就是代码的执行过程2 为何要用线程   线程vs进程     1. 同一进程下的多个线程共享该进程 ...

  6. 05.Python网络爬虫之三种数据解析方式

    引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...

  7. 05,Python网络爬虫之三种数据解析方式

    回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据 ...

  8. 《Python网络爬虫之三种数据解析方式》

    引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...

  9. 05 Python网络爬虫的数据解析方式

    一.爬虫数据解析的流程 1.指定url 2.基于requests模块发起请求 3.获取响应中的数据 4.数据解析 5.进行持久化存储 二.解析方法 (1)正则解析 (2)bs4解析 (3)xpath解 ...

随机推荐

  1. pypi 打包分发

    打包Python项目 本教程将指导您如何打包一个简单的Python项目.它将向您展示如何添加必要的文件和结构来创建包,如何构建包以及如何将其上载到Python包索引. 一个简单的项目 本教程使用一个名 ...

  2. discuz开发实现自动获取后台入口代码

    一般discuz后台入口默认是admin.php,不过部分用户为了安全可能会修改后台入口文件名称,可以用代码 '.ADMINSCRIPT.'?frame=no&action=tools& ...

  3. CNN是怎样一步步工作的?

    非常形象详细的博客:链接1 链接2 为了完成我们的卷积,我们不断地重复着上述过程,将feature和图中每一块进行卷积操作.最后通过每一个feature的卷积操作,我们会得到一个新的二维数组.这也可以 ...

  4. 写入Txt文本信息

    public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { L ...

  5. eclipse scala语法用java检验 报错问题

    传送门 https://stackoverflow.com/questions/8522149/eclipse-not-recognizing-scala-code 还是 直接用eclipse的 sc ...

  6. 从三数之和看如何优化算法,递推-->递推加二分查找-->递推加滑尺

    人类发明了轮子,提高了力的使用效率. 人类发明了自动化机械,将自己从重复的工作中解脱出来. 提高效率的方法好像总是离不开两点:拒绝无效劳动,拒绝重复劳动.人类如此,计算机亦如是. 前面我们说过了四数之 ...

  7. QHBoxLayout 、QFormLayout 遍历子部件,查找QLineEdit控件

    布局如下: QLineEdit * edit1 = new QLineEdit; QLineEdit * edit2 = new QLineEdit; QLineEdit * edit3 = new ...

  8. Python爬虫爬取BT之家找电影资源

    一.写在前面 最近看新闻说圣城家园(SCG)倒了,之前BT天堂倒了,暴风影音也不行了,可以说看个电影越来越费力,国内大厂如企鹅和爱奇艺最近也出现一些幺蛾子,虽然目前版权意识虽然越来越强,但是很多资源在 ...

  9. WebUploader 被 FormData 函数坑了,用了他的页面千万别定FormData变量

    WebUploader 被  FormData 函数坑了,用了他的页面千万别定FormData变量 被这个坑了,页面中变量var FormData=null;后又为他赋了值,所有一直上传不了,也没有错 ...

  10. Shell脚本之六 数学计算

    前面一节Shell篇之五 基本运算符介绍了常见的 Shell 算术运算符,这节介绍 Shell 的数学计算.Shell 和其它编程语言不同,Shell 不能直接进行算数运算,必须使用数学计算命令. 下 ...