python爬虫—数据解析技术使用教程
python爬虫——数据解析
1. 聚焦爬虫
爬取页面中指定的页面内容。
-
编码流程:
- 指定url
- 发起请求
- 获取响应数据
- 数据解析
- 持久化存储
2. 数据解析分类
-
正则解析
应用案例python爬虫——基于正则表达式获取糗事百科多个页面上的图片 -
bs4(仅能被应用于python语言中)
应用案例python爬虫——基于bs4数据解析技术爬取文章
-
实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中。
-
通过调用BeautifulSoup对象中相关的属性或者方法,进行标签定位和数据提取。
-
所需环境:
pip install bs4
pip install lxml -
实例化BeautifulSoup对象:
a. 导包
from bs4 import BeautifulSoup
b. 对象的实例化
(1)将本地的html文档中的数据加载到该对象中
with open('./test.html','r',encoding='utf-8') as fp: soup = BeautifulSoup(fp,'lxml') print(soup)
(2)将互联网上获取的页面源码加载到该对象中
page_text = response.text soup = BeautifulSoup(page_text,'lxml')
c. 提供用于数据解析的方法和属性
1. 标签定位的方法
find()方法
方法 作用 soup.tagName 返回的是文档中第一次出现的tagName对应的标签。 soup.find() 1. soup.find(‘tagName’) 等同于soup.tagName soup.find() 2.属性定位:soup.find(‘tagName’,属性_=‘参数值’)。例如:soup.find(‘div’,class_=‘head_wrapper’) soup.find_all(‘tagName’) 返回符合要求的所有标签(列表)
select方法
方法 作用 select(‘某种选择器(id,class,标签…选择器)’) 返回的是一个列表 soup.select(’.标签class的参数值 > 下一级标签名 > 再下一级标签名’) 层级选择器,可获取指定层的所有标签,返回的是一个列表。其中,“>”表示的是一个层级。例如:soup.select(’.tang > ul > li > a’) soup.select(’.标签class的参数值 > 下一级标签名 再下一级标签名’) 层级选择器,可获取跨层级的所有标签,返回的是一个列表。其中,空格表示的是多个层级。例如:soup.select(’.tang > ul a’) 注:若想获得soup.select(’.tang > ul > li > a’) 中的指定的标签,可使用列表操作,例如:soup.select(’.tang > ul > li > a’)[0]
2. 获取标签之间文本数据的方法
结合上述标签定位方法,在后面再加上text/string/get_text()方法即可。例如: soup.a.text/string/get_text()
-
text/get_text():可获得标签中,所有的文本内容。即使不属于该标签直系的文本内容也可以获取。
-
string:只可以获取该标签下面直系的文本内容。
3. 获取标签中属性值
例如:soup.a[‘href’],soup.select(’.tang > ul a’)[0][‘href’]
-
(***)xpath解析(可通用的方式)
应用案例python爬虫——基于xpath爬取58同城房源信息
最常用且最便捷高效的一种解析方式
- xpath解析原理:
- 实例化一个etree的对象,并且需要将被解析的页面源码数据加载到该对象中。
- 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。
-
环境的安装:
pip install lxml -
如何实例化一个etree对象:
从lxml中导入etreeefrom lxml import etree
-
将本地的html文档中的源码数据加载到etree对象中:
etree.parse(filePath) -
可以将从互联网上获取的源码数据加载到该对象中:
etree.HTML(‘page_text’) -
xpath(‘xpath表达式’):
(1) “/”:表示的是从根节点开始定位,代表一个层级。例如:tree.xpath(’/html/head/title’)
(2)"//":表示的是多个层级。可以表示从任意位置开始。例如:tree.xpath(’/html//title’)、tree.xpath(’//title’)
(3)属性定位://div[@class=‘s_tab’]
(4)索引定位://div[@class=“song”]/p[3]
注:索引是从1开始的不是从0.
(5)取文本:
- /text(): 获取的是标签中直系的文本内容
例如:tree.xpath(’//div[@class=“tang”]//li[5]/a/text()’)[0]
- //text():标签中非直系的文本内容
例如:tree.xpath(’//li[7]//text()’)
(6)取属性:
/@attrName
例如:tree.xpath(’//div[@class=“song”]/img/@src’)
3. 数据解析原理概述
解析的局部文本内容都会在标签之间或者标签对应的属性中进行存储。
-
步骤:
- 进行指定标签的定位
- 标签或者标签对应的属性中存储的数据值进行提取(解析)
本文地址:https://blog.csdn.net/qq_41094332/article/details/108253236
推荐阅读
-
使用Python解析JSON数据的基本方法
-
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
-
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
-
Python使用MySQLdb for Python操作数据库教程
-
在Python中使用zlib模块进行数据压缩的教程
-
在Python中使用SimpleParse模块进行解析的教程
-
在Python3中使用asyncio库进行快速数据抓取的教程
-
使用Python的urllib和urllib2模块制作爬虫的实例教程
-
使用Python操作Elasticsearch数据索引的教程
-
Python连接mysql数据库及python使用mysqldb连接数据库教程