Day:004(4) | Python爬虫:高效数据抓取的编程技术(数据解析)

news2024/12/23 14:00:45

XPath工具

浏览器-元素-Ctrl+F

浏览器-控制台-  $x(表达式)

Xpath helper (安装包需要科学上网) 

 问题

使用离线安装包 出现 程序包无效


解决方案
使用修改安装包的后缀名为 rar,解压文件到一个文件夹,再用
加载文件夹的方式安装即可

安装 

python若使用需要安装lxml模块

pip install lxml

Xpath实战-纵横网 

 代码

from fake_useragent import UserAgent
import requests
from lxml import etree
from time import sleep
for i in range(1,6):
    print(f'========正在获取第{i}页数据
=======')
    url =
f'http://www.zongheng.com/rank/details.html?
rt=1&d=1&p={i}'
    headers = {'UserAgent':UserAgent().chrome}
    resp = requests.get(url,headers
=headers)
    # 构造etree对象
    e = etree.HTML(resp.text)
    names =
e.xpath('//div[@class="rank_d_b_name"]/@titl
e')
    for name in names:
        print(name)
    sleep(1)

JSON数据使用

        JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行

阅读和编写。

        同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间

的数据交互

JSON和XML的比较可谓不相上下

Python 中自带了JSON模块,直接 import json 就可以使用了

官方文档:https://docs.python.org/3/library/json.html

Json在线解析网站:https://www.json.cn/#

json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种

结构可以表示各种复杂的结构。

  • 对象:对象在js中表示为{ }括起来的内容,数据结构为 { key:value, key:value, ... }的键值对的结构。在面向对象的语言中,key为对象的属性,value为对应的属性值。取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象这几种
  • 数组:数组在js中是中括号[ ]括起来的内容,数据结构为["Python", "javascript", "C++", ...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

Python中的json模块

json模块提供了四个功能:

  • dumps
  • dump
  • loads
  • load 

json.loads()

把Json格式字符串解码转换成Python对象 从json到python的类型转化对照如下: 

import json
strList = '[1, 2, 3, 4]'
strDict = '{"city": "北京", "name": "范爷"}'
json.loads(strList)
# [1, 2, 3, 4]
json.loads(strDict) # json数据自动按Unicode存储
# {u'city': u'\u5317\u4eac', u'name':
u'\u5927\u732b'}

json.dumps()

实现python类型转化为json字符串,返回一个str对象 把一个Python对象编码转换成Json字符串

从python原始类型向json类型的转化对照如下: 

import json

listStr = [1, 2, 3, 4]
tupleStr = (1, 2, 3, 4)
dictStr = {"city": "北京", "name": "范爷"}
json.dumps(listStr)
# '[1, 2, 3, 4]'
json.dumps(tupleStr)
# '[1, 2, 3, 4]'
# 注意:json.dumps() 序列化时默认使用的ascii编码
# 添加参数 ensure_ascii=False 禁用ascii编码,按utf-8编码
json.dumps(dictStr)
# '{"city": "\\u5317\\u4eac", "name":
"\\u5927\\u5218"}'print(json.dumps(dictStr,ensure_ascii=False))
# {"city": "北京", "name": "范爷"}

json.dump() 

将Python内置类型序列化为json对象后写入文件

import json

listStr = [{"city": "北京"}, {"name": "范爷"}]
json.dump(listStr, open("listStr.json","w"),
ensure_ascii=False)

dictStr = {"city": "北京", "name": "范爷"}
json.dump(dictStr, open("dictStr.json","w"),
ensure_ascii=False)

json.load()

读取文件中json形式的字符串元素 转化成python类型

import json

strList = json.load(open("listStr.json"))
print(strList)
# [{u'city': u'\u5317\u4eac'}, {u'name':u'\u5927\u5218'}]

strDict = json.load(open("dictStr.json"))
print(strDict)
# {u'city': u'\u5317\u4eac', u'name':u'\u5927\u5218'}

 注意事项

  • json.loads() 是把 Json格式字符串解码转换成Python对象,如果在json.loads的时候出错,要注意被解码的Json字符的编码。如果传入的字符串的编码不是UTF-8的话,需要指定字符编码的参数encoding。
    data_dict = json.loads(jsonStrGBK);
    

  • dataJsonStr是JSON字符串,假设其编码本身是非UTF-8的话而是GBK 的,那么上述代码会导致出错,改为对应的:
    data_dict = json.loads(jsonStrGBK,encoding="GBK");
    

  • 如果 dataJsonStr通过encoding指定了合适的编码,但是其中又包含了其他编码的字符,则需要先去将dataJsonStr转换为Unicode,然后再指定编码格式调用json.loads()
    dataJsonStrUni =dataJsonStr.decode("GB2312");
    dataDict = json.loads(dataJsonStrUni,encoding="GB2312");
    

JsonPath的使用 

JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Python,Javascript, PHP和 Java。

JsonPath 对于 JSON 来说,相当于 XPATH 对于 XML。

安装

 pip install jsonpath

 官方文档:https://goessner.net/articles/JsonPath/

JsonPath与XPath语法对比

Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1581520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2024年5月备考新增】《软考案例分析答题技巧(3)质量、资源》

2.5 项目质量管理 质量管理过程 质量管理过程:规划质量管理-管理质量-控制质量。 管理质量意义: ① 通过执行有关产品特定方面的设计准则,设计出最优的成熟产品; ② 建立信心,相信通过质量保证工具和技术(如质量审计和故障分析)可以使未来输出在完工时满足特定的需求…

动态规划刷题(2)之杨辉三角(详细解释)

最近在自学动态规划,网上到处找资料学习: 在这里记录我的刷题历史: 题目都是在力扣里面刷的!! 这里,我放一个刷动态规划的链接在这里:动态规划知识点题库 - 力扣(LeetCode) 力扣 在这里附加动态规划相关知识点:动态规划(DP)-CSDN博客文章浏览阅读197次。动态规划…

postgresql uuid

示例数据库版本PG16,对于参照官方文档截图,可以在最上方切换到对应版本查看,相差不大。 方法一:自带函数 select gen_random_uuid(); 去掉四个斜杠,简化成32位 select replace(gen_random_uuid()::text, -, ); 官网介绍…

从数据中台到上层应用全景架构示例

一、前言 对于大型企业而言,数据已经成为基本的生产资料,但是有很多公司还是值关心上层应用,而忽略了数据的治理,从而并不能很好的发挥公司的数据资产效益。比如博主自己是做后端的,主要是做应用层,也就是…

(源码+部署+讲解)基于Spring Boot + Vue编程学习平台的设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 🌟…

HDFS [MSST‘10] 论文阅读笔记

原论文:The Hadoop Distributed File System (MSST’10) HDFS关键技术要点概览 设计目标:HDFS旨在可靠地存储大型数据集,并以高带宽流式传输这些数据集到用户应用程序。它通过在大量服务器上分布存储和计算资源,使得资源可以随着需求的增长而扩展,同时保持经济高效。架构组…

Day:004(3) | Python爬虫:高效数据抓取的编程技术(数据解析)

BS4实战-人民网 人民网_网上的人民日报 (people.com.cn)http://www.people.com.cn/ import requests from fake_useragent import UserAgent from bs4 import BeautifulSoupurl http://www.people.com.cn/ headers {User-Agent:UserAgent().chrome} # 发送请求 resp request…

前端入门:极简登录网页的制作(未使用JavaScript制作互动逻辑)

必备工具:vscode Visual Studio Code - Code Editing. Redefined 目录 前言 准备 HTML源文件的编写(构建) head部分 body部分 网页背景设置 网页主体构建 CSS源文件的编写(设计) 结果展示 前言 博主稍稍自…

基于ES-EKF的LiDAR/GNSS/IMU传感器融合轨迹估计(附项目源码)

基于改进EKF的LiDAR/GNSS/IMU传感器融合轨迹估计(附项目源码) 算法概述PredictionCorrectionES-EKF算法融合算法实现轨迹估计实验结果 最近在研究传感器融合,看到一个很好的开源项目,适合小白学习,为以后做传感器融合、…

Vue3 + Vite 构建组件库发布到 npm

你有构建完组件库后,因为不知道如何发布到 npm 的烦恼吗?本教程手把手教你用 Vite 构建组件库发布到 npm 搭建项目 这里我们使用 Vite 初始化项目,执行命令: pnpm create vite my-vue-app --template vue这里以我的项目 vue3-xm…

Rocky(Centos)数据库等高并发或高io应用,linux应调优系统

一、系统参数优化 默认的最大打开文件数是1024.不满足生产环境的要求。按照如下配置: 1、修改 systemctl管理的 servie 资源限制 编辑/etc/systemd/system.conf # 全局的打开文件数 DefaultLimitNOFILE2097152 # 全局打开进程数 DefaultLimitNPROC655352、调整系…

GitHub 仓库 (repository) Watch - Star - Fork - Follow

GitHub 仓库 [repository] Watch - Star - Fork - Follow References 眼睛图标旁边写着 Watch 字样。点击这个按钮就可以 Watch 该仓库,今后该仓库的更新信息会显示在用户的公开活动中。Star 旁边的数字表示给这个仓库添加 Star 的人数。这个数越高,代表…

(源码+部署+讲解)基于Spring Boot + Vue的车位租赁系统设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 🌟…

4.9总结(Stream流,方法引用概述 || 乘法逆元,组合数)

Stream流 基本概念:以更简便的方式操作集合数据的形式; Steam流的操作步骤: 获取Stream流 中间方法:去重,跳过,获取, 过滤, 合并流,转换类型; 终结方法&…

VR紧急情况模拟|V R体验中心加盟|元宇宙文旅

通过VR技术实现紧急情况模拟,提升安全应急能力! 简介:面对突发紧急情况,如火灾、地震、交通事故等,正确的反应和应对能够有效减少伤害和损失。为了提高人们在紧急情况下的应急能力,我们借助先进的虚拟现实…

微软对其基于Arm的Windows系统终将超越苹果充满信心

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

关于Salesforce DevOps的理解

“DevOps”是一组结合了软件开发 (Dev) 和运营 (Ops) 的实践,可帮助团队更快、更可靠地构建、测试和发布软件。 DevOps 的核心理念包括持续集成(Continuous Integration)、持续交付(…

实战要求下,如何做好资产安全信息管理

文章目录 一、资产安全信息管理的重要性二、资产安全信息管理的痛点三、如何做好资产安全信息管理1、提升资产安全信息自动化、集约化管理能力,做到资产全过程管理2、做好资产的安全风险识别3、做好互联网暴露面的测绘与管空4、做好资产安全信息的动态稽核管理 “摸…

Kotlin:常用标准库函数(let、run、with、apply、also)

一、let 扩展函数 Kotlin标准库函数let可用于范围确定和空检查。当调用对象时,let执行给定的代码块并返回其最后一个表达式的结果。对象可以通过引用(默认情况下)或自定义名称在块中访问。 let扩展函数源码 let.kt文件代码 fun main() {println("isEmpty $is…

搭建Grafana+Prometheus监控Spring Boot应用

Spring项目改造 maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency><dependency><groupId>io.micrometer</groupId><artif…