爬虫--数据解析

数据解析的目的是获取局部的数据

数据解析的方法有正则,xpath,bs4

正则:https://www.cnblogs.com/l1222514/p/11011009.html

正则解析:
  import re
  #正则获取定位 可以获取括号里面的内容
  ex='xxxxx(.*?)xxxx'
  re.findall(ex,page_text,re.S)

bs4解析
 解析原理:
  实例化一个Beautifulsoup的对象,且将页面源码数据加载到该对象中
  使用该对象的相关属性和方法实现标签定位和数据提取
环境的安装:
  pip install bs4
  pip install lxml
实例化Beautifulsoup对象
  BeautifulSoup(page_text,'lxml'):将从互联网上请求到的页面源码数据加载到该对象中
  BeautifulSoup(fp,'lxml'):将本地存储的一样页面源码数据加载到该对象中

bs4的方法:
  from bs4 import BeautifulSoup
  soup = BeautifulSoup(fp,'lxml')
方法1#soup.tagName:只可以定位到第一次出现的tagName标签
  soup.title
  soup.div
方法2#soup.find(‘tagName’)
  soup.find('a') # ==soup.a
方法3#属性定位
  soup.find('div',class_='song')
方法4#find_all
  soup.find_all('div')[2]
方法5#select('选择器') 选择器中class用.表示
  ‘>’:表示一个层级 空格:表示多个层级
  soup.select('.song')
  soup.select('.tang > ul > li > a') #==soup.select('.tang a')

获取文本的方法##取文本:string取的是直系的文本数据,text获取的是全部的数据
  soup.p.string
  soup.find('div',class_='tang').get_text() #==soup.find('div',class_='tang').text
获取属性的方法#取属性
  soup.a['href']
  soup.select('.tang > ul > li > a')[0]['href']

 

xpath解析:
  解析效率比较高
  通用性最强的

环境安装:pip install lxml
解析原理:
  实例化一个etree对象且将即将被解析的页面源码数据加载到该对象中
  使用etree对象中的xpath方法结合着xpath表达式进行标签定位和数据提取
实例化etree对象
  etree.parse('本地文件路径')
  etree.HTML(page_text)


xpath定位方法:
  from lxml import etree
  tree = etree.parse('./test.html')
方法1:#定位title标签
  #第一个/表示根目录
  tree.xpath('/html/head/title')
  tree.xpath('/html//title')
  tree.xpath('//title')
方法2:#定位class=song的div
  tree.xpath('//div[@class="song"]')
  tree.xpath('//div[2]') #xpath表达式中的索引是从1开始
  tree.xpath('//div[@class="tang"]/ul/li[4]/a') #==tree.xpath('//div[@class="tang"]//li[4]/a')

方法3:#取文本(获取李清照)
  /text() 获取直系文本 //text() 获取标签下的所有文本
  tree.xpath('//div[@class="song"]/p[1]/text()')[0]
  tree.xpath('//div[@class="song"]//text()')
方法4:#取属性 /@属性

  tree.xpath('//a/@href')

 

 

  

 

posted @   QV  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
历史上的今天:
2019-05-08 ansible的roles使用
点击右上角即可分享
微信分享提示