Python爬虫 JsonPath/BeautifulSoup使用(四)

文章介绍了Python中用于JSON数据解析的jsonpath库和HTML解析的BeautifulSoup库。讲解了如何安装这两个库以及它们的基本用法,如jsonpath的jsonpath语法和BeautifulSoup的find、find_all及select方法,用于查找和提取数据。同时提到了BeautifulSoup在处理HTML时的优缺点,强调了其人性化的接口。
摘要由CSDN通过智能技术生成

简介

json解析工具

安装

jsonpath的安装及使用方式:

pip安装:
pip install jsonpath 

jsonpath的使用:
obj = json.load(open('json文件', 'r',encoding='utf‐8')) 
ret = jsonpath.jsonpath(obj, 'jsonpath语法')

参考语法

简介

  1. BeautifulSoup
    简称: bs4
  2. 什么是BeatifulSoup?
    BeautifulSoup,和lxml一样,是一个html的解析器,主要功能也是解析和提取数据
  3. 优缺点?
    缺点:效率没有lxml的效率高 优点:接口设计人性化,使用方便

文档

安装

  1. 安装
    pip install bs4

  2. 导入
    from bs4 import BeautifulSoup

  3. 创建对象 服务器响应的文件生成对象
    soup = BeautifulSoup(response.read().decode(), ‘lxml’)

  4. 本地文件生成对象
    soup = BeautifulSoup(open(‘1.html’), ‘lxml’) 注意:默认打开文件的编码格式gbk所以需要指定打开编码格式

示例

from bs4 import BeautifulSoup

# 本地文件生成对象
soup = BeautifulSoup(open('a.html'), 'lxml')

# 查询第一个
print(soup.find('a'))

# 查询所有a标签和span标签
print(soup.find_all(['a','span']))

# class寻找
print(soup.select('.weui-desktop-layout__side'))

# 层级选择器dev下面的span
print(soup.select('dev,span'))

# 获取内容,String只能获取到下面没其余标签的情况
print(soup.select('dev,span')[0].string)
print(soup.select('dev,span')[0].get_text())

# 获取节点属性
print(soup.select('dev,span')[0]['v-if'])
print(soup.select('dev,span')[0].attrs.get('v-if'))


语法解析

  1. 根据标签名查找节点
soup.a 【注】只能找到第一个a
soup.a.name
soup.a.attrs
  1. 函数
(1).find(返回一个对象)
    find('a'):只找到第一个a标签
    find('a', title='名字')
    find('a', class_='名字')

(2).find_all(返回一个列表)
    find_all('a') 查找到所有的a 
    find_all(['a', 'span']) 返回所有的a和span 
    find_all('a', limit=2) 只找前两个a


(3).select(根据选择器得到节点对象)【推荐】
    1.element
     eg:p
     
    2..class
     eg:.firstname
     
    3.#id
      eg:#firstname

4.属性选择器

[attribute]
     eg:li = soup.select('li[class]')
 [attribute=value]
     eg:li = soup.select('li[class="hengheng1"]')

5.层级选择器

element element
     div p
    element>element
     div>p
    element,element
     div,p
    eg:soup = soup.select('a,span')
  1. 获取标签值
(1).获取节点内容:适用于标签中嵌套标签的结构 obj.string
obj.get_text()【推荐】

(2).节点的属性
tag.name 获取标签名 
eg:tag = find('li) print(tag.name)
tag.attrs将属性值作为一个字典返回 

(3).获取节点属性
obj.attrs.get('title')【常用】 obj.get('title')
obj['title']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

niubility锐

觉得有用的话鼓励鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值