python爬虫---爬虫的数据解析的流程和解析数据的几种方式
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爬虫---爬虫的数据解析的流程和解析数据的几种方式的更多相关文章
- Log4j源码解析--框架流程+核心解析
OK,现在我们来研究Log4j的源码: 这篇博客有参照上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/06/28/381667.htm ...
- 在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, ...
- Repeater 控件 当数据源没有数据的时候显示 暂无数据 的两种方式
第一种:现在前台给Repeater控件外面的div加一个runat=”server” 然后在cs后台判断数据源是否为空, 是的话就修改这个前台div的InnerText或者是InnerHtml 即可 ...
- 【TP3.2 + 其他任何PHP框架】编辑、删除、添加数据,返回原分页 (ajax+form两种方式提交均可以)
1.目的1:在如下的一个页面中,p=2,比如我们删除数据id=13,通过ajax提交{id,p} 这2个参数,就可以了,页面返回json的url参数中原样带上p即可. 2.目的2: 步骤1:在如下页面 ...
- Python 35 线程(1)线程理论、开启线程的两种方式
一:线程理论 1 什么是线程 进程其实一个资源单位,而进程内的线程才是cpu上的执行单位 线程其实指的就是代码的执行过程2 为何要用线程 线程vs进程 1. 同一进程下的多个线程共享该进程 ...
- 05.Python网络爬虫之三种数据解析方式
引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...
- 05,Python网络爬虫之三种数据解析方式
回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据 ...
- 《Python网络爬虫之三种数据解析方式》
引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...
- 05 Python网络爬虫的数据解析方式
一.爬虫数据解析的流程 1.指定url 2.基于requests模块发起请求 3.获取响应中的数据 4.数据解析 5.进行持久化存储 二.解析方法 (1)正则解析 (2)bs4解析 (3)xpath解 ...
随机推荐
- pypi 打包分发
打包Python项目 本教程将指导您如何打包一个简单的Python项目.它将向您展示如何添加必要的文件和结构来创建包,如何构建包以及如何将其上载到Python包索引. 一个简单的项目 本教程使用一个名 ...
- discuz开发实现自动获取后台入口代码
一般discuz后台入口默认是admin.php,不过部分用户为了安全可能会修改后台入口文件名称,可以用代码 '.ADMINSCRIPT.'?frame=no&action=tools& ...
- CNN是怎样一步步工作的?
非常形象详细的博客:链接1 链接2 为了完成我们的卷积,我们不断地重复着上述过程,将feature和图中每一块进行卷积操作.最后通过每一个feature的卷积操作,我们会得到一个新的二维数组.这也可以 ...
- 写入Txt文本信息
public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { L ...
- eclipse scala语法用java检验 报错问题
传送门 https://stackoverflow.com/questions/8522149/eclipse-not-recognizing-scala-code 还是 直接用eclipse的 sc ...
- 从三数之和看如何优化算法,递推-->递推加二分查找-->递推加滑尺
人类发明了轮子,提高了力的使用效率. 人类发明了自动化机械,将自己从重复的工作中解脱出来. 提高效率的方法好像总是离不开两点:拒绝无效劳动,拒绝重复劳动.人类如此,计算机亦如是. 前面我们说过了四数之 ...
- QHBoxLayout 、QFormLayout 遍历子部件,查找QLineEdit控件
布局如下: QLineEdit * edit1 = new QLineEdit; QLineEdit * edit2 = new QLineEdit; QLineEdit * edit3 = new ...
- Python爬虫爬取BT之家找电影资源
一.写在前面 最近看新闻说圣城家园(SCG)倒了,之前BT天堂倒了,暴风影音也不行了,可以说看个电影越来越费力,国内大厂如企鹅和爱奇艺最近也出现一些幺蛾子,虽然目前版权意识虽然越来越强,但是很多资源在 ...
- WebUploader 被 FormData 函数坑了,用了他的页面千万别定FormData变量
WebUploader 被 FormData 函数坑了,用了他的页面千万别定FormData变量 被这个坑了,页面中变量var FormData=null;后又为他赋了值,所有一直上传不了,也没有错 ...
- Shell脚本之六 数学计算
前面一节Shell篇之五 基本运算符介绍了常见的 Shell 算术运算符,这节介绍 Shell 的数学计算.Shell 和其它编程语言不同,Shell 不能直接进行算数运算,必须使用数学计算命令. 下 ...