python爬虫数据解析xpath、jsonpath,bs4

这篇具有很好参考价值的文章主要介绍了python爬虫数据解析xpath、jsonpath,bs4。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据的解析

解析数据的方式大概有三种

  • xpath
  • JsonPath
  • BeautifulSoup

xpath

 安装xpath插件

python爬虫数据解析xpath、jsonpath,bs4,python爬虫,python,爬虫,开发语言

打开谷歌浏览器扩展程序,打开开发者模式,拖入插件,重启浏览器,ctrl+shift+x,打开插件页面

python爬虫数据解析xpath、jsonpath,bs4,python爬虫,python,爬虫,开发语言

python爬虫数据解析xpath、jsonpath,bs4,python爬虫,python,爬虫,开发语言

安装lxml库 

安装在python环境中的Scripts下边,这里就是python库的位置,例如我的地址为:E:\python\python3.10.11\Scripts

pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple

python爬虫数据解析xpath、jsonpath,bs4,python爬虫,python,爬虫,开发语言

xpath使用和基本语法

解析本地文件etree.parse( 'xx.html')4.etree.HTML()

解析服务器响应文件html_tree = etree.HTML(response.read().decode( 'utf-8')4.html tree.xpath(xpath路径)

xpath基本语法:

路径查询

        // : 查找所有子孙节点,不考虑层级关系

        /  :找直接子节点

谓词查询

        //div[@id] :包含id属性的div

        //div[@id="maincontent"] :id = maincontent的div

属性查询

        //@class :   返回指定标签的class属性

模糊查询

        //div[contains(@id,"he")] 包含

        //div[starts-with(@id,"he")] :以he开头

内容查询

        //div/h1/text() : text()显示内容

逻辑运算

      //div[@id="head" and @class="s down"] : 逻辑&& 

xpath解析本地文件 

本地文件如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
  <ul>
    <li id="00" class="beijing">北京</li>
    <li>上海</li>
    <li>深圳</li>
    <li>广州</li>
  </ul>
  <ul>
    <li id="11" class="shenyang">沈阳</li>
    <li>南京</li>
  </ul>
</body>
</html>

解析本地文件

from lxml import etree

# 解析本地文件 使用etree.parse
tree = etree.parse('Test.html')

# 找到所有的ul
ul_list = tree.xpath("//ul")

# 查找所有的li
li_list = tree.xpath("//ul/li")

# 查找所有包含id的li
id_li_list = tree.xpath("//ul/li[@id]")

# 查找id为00的li,并找到内容 注意引号问题
content_list = tree.xpath("//ul/li[@id='00']/text()")

# 查找id包含0的li的内容
contains_list = tree.xpath("//ul/li[contains(@id,'0')]/text()")

# 获取id为11的li class属性值@class
li = tree.xpath("//ul/li[@id='11']/@class")
print(ul_list)

print(li_list)

print(id_li_list)

print(contains_list)

print(content_list)

print(li)

"""
输出结果:
[<Element ul at 0x22c26c38240>, <Element ul at 0x22c26c38600>]
[<Element li at 0x22c26c38640>, <Element li at 0x22c26c385c0>, <Element li at 0x22c26c38680>, <Element li at 0x22c26c386c0>, <Element li at 0x22c26c38700>, <Element li at 0x22c26c38780>]
[<Element li at 0x22c26c38640>, <Element li at 0x22c26c38700>]
['北京']
['北京']
['shenyang']
"""

xpath解析服务器文件 

使用xpath插件检查xpath路径的匹配,解析定位dom

python爬虫数据解析xpath、jsonpath,bs4,python爬虫,python,爬虫,开发语言

from lxml import etree
import urllib.request as request

# 下载图片
url = "https://www.baidu.com/"

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
}

# 构建的请求对象
geneRequest=request.Request(url=url,headers = headers)
# 模拟浏览器发送请求
response = request.urlopen(geneRequest)
# 获取内容
content = response.read().decode('utf-8')

# 解析服务器文件
tree = etree.HTML(content)

# 找到百度一下的值
result = tree.xpath('//input[@id="su"]/@value')

print(result)

"""
输出结果:['百度一下']
"""

jsonpath

jsonpath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,只能读取本地的json文件,与xpath类似,只不过对应符号不同

 jsonpath安装

pip install jsonpath -i https://pypi.tuna.tsinghua.edu.cn/simple

python爬虫数据解析xpath、jsonpath,bs4,python爬虫,python,爬虫,开发语言

xpath和jsonpath的对应关系 

XPath     JSONPath  描述
/   根节点
.  @  现行节点
/ .or[] 取子节点
、、 n/a 取父节点,Jsonpath未支持
//  、、 就是不管位置,选择所有符合条件的条件
匹配所有元素节点
@ n/a  根据属性访问,Json不支持,因为Json是个Key-value递归结构,不需要
[]  []  迭代器标识(可以在里边做简单的迭代操作,如数组下标,根据内容选值等
[]  ?() 支持过滤操作
| [,] 支持迭代器中做多选
n/a () 支持表达式计算
() n/a 分组,JsonPath不支持

jsonpath解析

准备json

  {
    "store": {
      "book":[
        { "category": "射手",
          "author": "鲁班七号",
          "title": "王者荣耀",
          "price": 8.95
        },
        {
          "category": "打野",
          "author": "李白",
          "title": "大河之水天上来",
          "price": 22.99
        }
      ],
      "bicycle": {
        "color": "red",
        "price": 19.95
      }
    }
  }

 通过jsonpath解析json数据

import json
import jsonpath

obj = json.load(open('test.json',"r",encoding="utf-8"))

# 查看store下的bicycle的color属性 $ 对应xpath/
colorAttr = jsonpath.jsonpath(obj, "$.store.bicycle.color")

# 输出book节点的第一个对象
bookFirst = jsonpath.jsonpath(obj, "$.store.book[0]")

# 输出book节点中所有对象对应的属性title值
titles = jsonpath.jsonpath(obj, "$.store.book[*].title")

# 输出book节点中所有价格小于10的对象 ?() 对应xpath  [] @ 对应当前节点
books = jsonpath.jsonpath(obj, "$.store.book[?(@.price<10)]")

print(colorAttr)

print(bookFirst)

print(titles)

print(books)

"""
输出结果:
['red']
[{'category': '射手', 'author': '鲁班七号', 'title': '王者荣耀', 'price': 8.95}]
['王者荣耀', '大河之水天上来']
[{'category': '射手', 'author': '鲁班七号', 'title': '王者荣耀', 'price': 8.95}]
"""

BeautifulSoup

Beautifulsoup简称bs4,Beautifulsoup,和lxml一样,是一个html的解析器,主要功能也是解析和提取数据

  • 缺点: 效率没有1xm1的效率高
  • 优点: 接口设计人性化,使用方便

BeautifulSoup安装

pip install bs4  - i  https://pypi.tuna.tsinghua.edu.cn/simple

python爬虫数据解析xpath、jsonpath,bs4,python爬虫,python,爬虫,开发语言

 BeautifulSoup节点定位规则

soup = soup = Beautifulsoup(response.read().decode(),'Ixml') 解析服务器文件

soup = soup = Beautifulsoup(open('1.html').lxml')  解析本地文件

根据标签名查找节点
        soup.a  只能找到第一个a
        soup.a.namesoup.a.attrs   获取标签的属性和属性值

函数查找

  .find (返回一个对象 只能找到第一个a标签)

        find('a')

        find('a',title='名字')

        find('a',class='名字')

  .find_all (返回一个列表 )

        find all('a') 

        find all(['a’,'span']) 返回所有的a和span

  .select(根据选择器得到节点对象)[推荐]

        element

                eg: div

        class

                eg:.firstname

        id

                eg:#firstname

        属性选择器

                eg:li = soup.select('li[class]')

                eg:li = soup.select('li[class="hengheng"]')

        层级选择器

                element element

                          div p

                                eg:soup = soup.select('a span')

                element>element

                          div>p

                                eg:soup = soup.select('a>span')

                element,element

                          div,p

                                eg:soup = soup.select('a,span')

BeautifulSoup节点信息

获取节点内容

        obj.string

        obj.get_text()[推荐] 

获取节点的属性

        eg:tag = find('li)

                tag.name 获取标签名

                tag.attrs将属性值作为一个字典返回

获取节点属性

        obj.attrs.get('title')[常用]

        obj.get('title')

        obj['title']

BeautifulSoup解析文件

以上述xpath中的本地文件Test.html为例,上边已经写过,这里直接上代码文章来源地址https://www.toymoban.com/news/detail-648211.html

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('Test.html',encoding='utf-8'),'lxml')

# 查找第一个ul
print(soup.find("ul"))

# 查找所有的ul
print(soup.find_all("ul"))

# 选择查找 li class为beijing的标签
print(soup.select("li[class =beijing]"))

#层级选择查找ul下的class为beijing的li节点
nodeli=soup.select("ul li[class = beijing]")[0]

# 获取li节点内容
print(nodeli.get_text())

# 获取li标签名
print(nodeli.name)

#获取li的属性
print(nodeli.attrs)

# 获取li的id属性
print(nodeli.attrs.get('id'))

"""
输出结果:
<ul>
<li class="beijing" id="00">北京</li>
<li>上海</li>
<li>深圳</li>
<li>广州</li>
</ul>
[<ul>
<li class="beijing" id="00">北京</li>
<li>上海</li>
<li>深圳</li>
<li>广州</li>
</ul>, <ul>
<li class="shenyang" id="11">沈阳</li>
<li>南京</li>
</ul>]
[<li class="beijing" id="00">北京</li>]
北京
li
{'id': '00', 'class': ['beijing']}
00

"""

到了这里,关于python爬虫数据解析xpath、jsonpath,bs4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬虫之Requests库、BS4解析库的下载和安装

    一、Requests库下载地址 requests · PyPI 将下载的.whl文件放在Script目录下  win+r 输入cmd 进入windows控制台 进入到Scripts目录 输入pip3.10 install requests-2.28.1-py3-none-any.whl(文件的名称) 出现Successful install即安装成功  二、BS4解析库的下载和安装 进入到scripts目录 pip install bs4 由于 BS4

    2024年02月05日
    浏览(43)
  • python spider 爬虫 之 解析 xpath 、jsonpath、BeautifulSoup (三)

    简称:bs4 BeautifulSoup跟lxml 一样,是一个html文档的解析器,主要功能也是解析和提取数据 优缺点 缺点:效率没有lxml的效率高 优点:接口接口人性化,使用方便 延用了css选择器 安装BeautifulSoup 1、安装:pip install bs4 2、导入:from bs4 import BeautifulSoup 3、创建bs4 对象 ① 服务器响

    2024年02月11日
    浏览(61)
  • python-网络爬虫.BS4

    BS4 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库, 它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方 式。 Beautiful Soup 4 官方文档: https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ 帮助手册: https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/ 一、安装Beaut

    2024年02月14日
    浏览(37)
  • python爬虫8:bs4库

    前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好影响。 目录结构 1. 概述与安装 ​ bs4是BeautifulSoup4的简

    2024年02月12日
    浏览(38)
  • 【Python爬虫】Python爬虫三大基础模块(urllib & BS4 & Selenium)

    参考资料 Python爬虫教程(从入门到精通) Python urllib | 菜鸟教程 Beautiful Soup 4 入门手册_w3cschool Selenium入门指南 Selenium教程 什么是 Scrapy|极客教程 Scrapy入门教程 1、网络爬虫是什么? 我们所熟悉的一系列 搜索引擎都是大型的网络爬虫 ,比如百度、搜狗、360浏览器、谷歌搜索等

    2024年02月12日
    浏览(51)
  • 【用Vscode实现简单的python爬虫】从安装到配置环境变量到简单爬虫以及python中pip和request,bs4安装

    第一步:安装python包  可以默认,也可以选择自己想要安装的路径 python下载资源链接: Download Python | Python.org 第二步: 配置python环境变量,找到我的电脑-属性-高级-环境变量 找到python,新增 然后将刚刚安装的路径配置到path路径下: 特别注意,配置了环境变量后要进行重启电

    2024年02月15日
    浏览(54)
  • python爬虫数据解析xpath

    下载地址:百度网盘 请输入提取码 第一步: 下载好文件后会得到一个没有扩展名的文件,重命名该文件将其改为.rar或者.zip等压缩文件,解压之后会得到一个.crx文件和一个.pem文件。新建一个文件夹,将这两个文件放在该文件夹(本人将其命名为xpath-helper)内。 第二步: 将

    2024年02月10日
    浏览(40)
  • python---------bs4爬取数据的一种神器

     欢迎小可爱们前来借鉴我的gtieehttps://gitee.com/qin-laoda Beautiful Soup的简介 解析⼯具对⽐ BeautifulSoup的基本使⽤ 解析器 搜索⽂档树 CSS常⽤选择器介绍 select和css选择器提取元素 _______________________________________________ 前面我已经介绍了正则表达式,下面我们来介绍bs4 Beautiful Soup是py

    2024年02月09日
    浏览(46)
  • 解析库bs4的使用

    安装: pip3 install Beautifulsoup4 1.bs4遍历文档树 bs4:解析xml格式的模块,从xml中找想要的数据。 html是xml的一种,解析html,使用requests返回的数据,可能是json、html、文件,再使用bs4解析html格式。 用法: 注:lxml比html.parser速度块,但是需要安装lxml模块( pip3 install lxml ) 2.bs4搜

    2024年02月12日
    浏览(46)
  • Python爬虫——解析_jsonpath

    jsonpath的安装 jsonpath的使用: json文件: 书店所有书的作者 所有的作者 store下面所有的元素 store里面所有东西的price 第三本书 最后一本书 前两本书 条件过滤需要在()的前面添加一个? 过滤出所有包含isbn的书 哪本书超过了10块钱 参考:https://blog.csdn.net/Obstinate_L/article/details/1

    2024年02月14日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包