初始爬虫6

news/2024/9/18 21:27:06/ 标签: 爬虫

数据提取

        

数据提取总结  
    响应分类  
        结构化  
            json数据(高频出现)  
                json模块  
                jsonpath模块  
            xml数据(低频出现)  
                re模块  
                xml模块  
        非结构化  
            html  
                re模块  
                xml模块

xml以及和html的区别
        xml传输和存储数据
        html展示数据

jsonpath的用法:多层嵌套的复杂字典直接提取数据

  
 

常用记住三个就行:$(根节点)        .(子节点)        ..(相对索引) 

练习链接:http://www.lagou.com/lbs/getAllCitySearchLabels.json 

# -*- coding: utf-8 -*-import jsonpath
import requests
import jsonheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'
}
response = requests.get('http://www.lagou.com/lbs/getAllCitySearchLabels.json', headers=headers)dict_data = json.loads(response.content)# print(jsonpath.jsonpath(dict_data, '$..A..name'))print(jsonpath.jsonpath(dict_data, '$..name'))

 xpath的用法:处理lxml模块

学习链接:XPath 教程 (w3school.com.cn)

 使用工具:xpath helper(快速定位所求数据位置)

  1. 基本结构

    • html
    • /html/head/title
    • /html/title
    • //title
    • //title/text()
    • //link/@href
    • 斜杠隔开的是节点,/ 绝对索引,// 相对索引
  2. 说明

    • //title/text(): 从当前节点之上获取文本内容。
    • //link/@href: 从当前节点的子节点中获取属性值。

节点修饰语法:
1.通过索引修饰节点

        /html/body/div[3]/div/div[1]/div
        /html/body/div[3]/div/div[1]/div[3]
        /html/body/div[3]/div/div[1]/div[last()]        选中最后一个
        /html/body/div[3]/div/div[1]/div[last()-1]        选中倒数第二个
        /html/body/div[3]/div/div[1]/div[position()>=10]        范围选择
2.通过属性修饰节点

        //div[@id="content-left"]/div/@id     第一个@是使用标签属性修饰,第二@个是具体内容
3.通过子节点的值修饰节点

        //span[i>2000]
        //span[2>=9.4]
4.通过包含修饰

        //div[contains(@id,"qiushi_tag_")]
        //span[contains(text(),"—页")]
5.复合使用语法
        //h2/a | td/a             xpath 复合使用语法(跳转页面后xml结构变化)

***找翻页url时候尽量不要使用索引(翻页后xpath可能就变化不对了) 

 

 

 

 

# -*- coding: utf-8 -*-
from lxml import etreetext = '''
<div>  <ul>  <li class="item-1"><a href="link1.html">first item</a></li>  <li class="item-1"><a href="link2.html">second item</a></li>  <li class="item-inactive"><a href="link3.html">third item</a></li>  <li class="item-1"><a href="link4.html">fourth item</a></li>  <li class="item-0"><a href="link5.html">fifth item</a></li>  </ul>  
</div>
'''
# HTML 树结构,结果为字符串或者对象内存地址
html = etree.HTML(text)
# print(html)
# # dir() 查看html对象(即解析后的 HTML 树)所具有的所有属性和方法
# print(dir(html))# print(html.xpath('//a[@href="link1.html"]/text()'))
# print(html.xpath('//a[@href="link1.html"]/text()')[0])# 方法一:提取HTML文档中所有链接的文本和对应的链接地址
text_list = html.xpath('//a/text()')
link_list = html.xpath('//a/@href')
# for text in text_list :
#     myindex = text_list.index(text)
#     link = link_list[myindex]
#     print(text,link)# 方法二:
# for text,link in zip(text_list,link_list):
#     print(text,link)# 方法三:上面方法如果存在数据缺失的情况不能发现问题
el_list = html.xpath('//a')
for el in el_list :print(el.xpath('./text()')[0],el.xpath('./@href')[0])

http://www.ppmy.cn/news/1526990.html

相关文章

AWTK fscript 中的 value 扩展函数

fscript 是 AWTK 内置的脚本引擎&#xff0c;开发者可以在 UI XML 文件中直接嵌入 fscript 脚本&#xff0c;提高开发效率。本文介绍一下 fscript 中的 ** value 扩展函数 ** value 扩展函数 value 相关的辅助函数。 1. value_is_valid 判断 value 是否有效。 原型 value_i…

Zotero使用(一)PDF文件导入不会自动识别

上面两种&#xff0c;一种中文&#xff0c;一种英文&#xff0c;会发现&#xff0c;中文的导入进去之后不会自动识别&#xff0c;部分英文也是。不能自动识别就会缺少导出参考文献的功能&#xff0c;怎么办&#xff1f; 发现之前导入喜欢使用PDF格式 可以结合.ris格式&#xf…

【spring】spring框架中使用的设计模式有哪些,经典的设计模式应用,spring框架中哪些地方使用了哪些优秀的设计模式

【spring】spring框架中使用的设计模式有哪些&#xff0c;经典的设计模式应用&#xff0c;spring框架中哪些地方使用了哪些优秀的设计模式 Spring框架在设计和实现过程中&#xff0c;广泛使用了多种设计模式以增强其灵活性、可扩展性和易用性。以下是一些Spring框架中常见的设计…

24.9.16学习笔记

语义分割&#xff08;Semantic Segmentation&#xff09;是一种计算机视觉任务&#xff0c;其目标是对输入图像中的每一个像素进行分类&#xff0c;从而将图像中的不同物体或区域标记出来。与目标检测不同&#xff0c;语义分割不仅关注物体的存在与否&#xff0c;还要明确指出物…

nvidia-docker Failed to initialize NVML: Unknown Error

nvidia镜像拉下来了&#xff0c;但是运行不了。 执行以下命令 sudo docker run --rm --runtimenvidia --gpus all ubuntu nvidia-smi报错 Failed to initialize NVML: Unknown Error参考 https://stackoverflow.com/questions/72932940/failed-to-initialize-nvml-unknown-er…

facebook广告和谷歌广告如何选择效果最大化?

如果你在考虑投放数字广告&#xff0c;但对Facebook广告和Google广告之间的区别感到困惑&#xff0c;不确定该选择哪个平台&#xff0c;这篇文章我们将深入探讨谷歌广告和Facebook广告之间的核心区别&#xff0c;并分析哪些类型的产品更适合在哪个平台上进行推广。 Facebook广…

正点原子阿尔法ARM开发板-IMX6ULL(五)——IMX启动方式

文章目录 一、启动方式选择二、imxdownload做了什么事2.1 IVT2.2 Boot data2.3 DCD 一、启动方式选择 BOOT_MODE0和BOOT_MODE1,这两个是两个IO来控制的。选择从USB启动还是内部BOOT启动。如果要烧写系统到开发板中可以选择从USB下载&#xff0c;下载到SD卡&#xff0c;EMMC、N…

HarmonyOS开发实战( Beta5.0)自定义装饰器实践规范

介绍 本示例介绍通过自定义装饰器在自定义组件中自动添加inspector (布局回调)方法并进行调用。 效果图预览 不涉及 使用说明 在自定义组件上添加自定义装饰器CallbackObserver&#xff0c;并根据参数设置对应的方法名和需要绑定的组件的ID。编译工程&#xff0c;可以根据…

【Go】十五、分布式系统、Consul服务注册发现、Nacos配置中心搭建

分布式 传统开发方式的痛点&#xff1a; 我们的服务分为很多种&#xff1a;用户服务、商品服务、订单服务等&#xff0c;若我们一个成熟的体系内&#xff0c;新添加一个服务&#xff0c;会变得十分的繁琐与困难 当我们的负载较大时&#xff0c;如果选择添加机器的方式来减轻…

【算法】滑动窗口—最小覆盖子串

题目 ”最小覆盖子串“问题&#xff0c;难度为Hard&#xff0c;题目如下&#xff1a; 给你两个字符串 S 和 T&#xff0c;请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串&#xff0c;则算法返回空串&#xff0c;如果存在这样一个子串&#xff0c;则可…

网络安全(黑客技术)2024年—全新自学手册

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、…

2022高教社杯全国大学生数学建模竞赛C题 问题一(1) Python代码

目录 问题 11.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析数据探索 -- 单个分类变量的绘图树形图条形图扇形图雷达图Cramer’s V 相关分析统计检验列联表分析卡方检验Fisher检验绘图堆积条形图分组条形图分类模型Logistic回归随机森林import matplotlib…

昇腾服务器(Atlas800系列)部署embedding和rerank模型

昇腾服务器部署embedding和rerank模型 1、确定安装环境 环境型号CANN版本训练环境Atlas800T A2服务器CANN8.0.RC2及以上推理环境Atlas800I A2服务器CANN8.0.RC2及以上推理环境Atlas300IDUO推理卡CANN8.0.RC2及以上 2、获取下载包 资源包 可以使用wget命令下载&#xff1a;…

【数据结构】顺序表的定义和实现

顺序表的定义 顺序表是指用顺序存储的方式实现线性表 顺序存储&#xff1a;把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中&#xff0c;元素之间的关系由存储单元的邻接关系来体现 【看到这是否会和我有同样的疑问&#xff1a;顺序表和数组是一样的吗&#xff1f;这…

Python计算机视觉编程 第三章 图像到图像的映射

目录 单应性变换直接线性变换算法仿射变换 图像扭曲图像中的图像分段仿射扭曲 创建全景图RANSAC拼接图像 单应性变换 单应性变换是将一个平面内的点映射到另一个平面内的二维投影变换。在这里&#xff0c;平面是指图像或者三维中的平面表面。单应性变换具有很强的实用性&#…

【计网】从零开始使用TCP进行socket编程 --- 客户端与服务端的通信实现

阵雨后放晴的天空中&#xff0c; 出现的彩虹很快便会消失。 而人心中的彩虹却永不会消失。 --- 太宰治 《斜阳》--- 从零开始使用TCP进行socket编程 1 TCP与UDP2 TCP服务器类2.1 TCP基础知识2.2 整体框架设计2.3 初始化接口2.4 循环接收接口与服务接口 3 服务端与客户端测试…

【HTML】HTML页面和常见标签

文章目录 什么是前端HTML 页面编写如何快速生成代码框架常见标签注释标签标题标签段落标签换行标签格式化标签 什么是前端 Web 前端&#xff0c;用来直接给以用户呈现的一个一个的网页。一个软件通常是由 后端前端 完成的 后端&#xff1a;通过 Java/C等语言&#xff0c;完成相…

TS axios封装

方式一 service/request/request.ts import axios from axios import { ElLoading } from element-plus import type { AxiosRequestConfig, AxiosInstance, AxiosResponse } from axios import type { ILoadingInstance } from element-plus/lib/el-loading/src/loading.typ…

在 Android 中,自定义 View 的绘制流程

目录 1. 测量阶段 (onMeasure()) 2. 布局阶段 (onLayout()) 3. 绘制阶段 (onDraw()) 总体绘制流程 注意事项 示例总结 参考资料 在 Android 中&#xff0c;自定义 View 的绘制流程主要包括测量、布局、绘制三个关键步骤。具体来说&#xff0c;自定义 View 的绘制涉及重写…

Effective C++笔记之二十三:非void函数不写return

一.main函数 Qt Creator查看汇编的步骤如下 上图是g编译器下的汇编 eax就是main()函数的返回值 如果删掉return 0&#xff1b; 可以发现编译器还是把eax的值设为了0&#xff0c;由此可见&#xff0c;即使在main函数中不写return 0&#xff0c;编译器还是会默认添加个return 0。…