初始爬虫6

embedded/2024/9/25 9:40:47/

数据提取

        

数据提取总结  
    响应分类  
        结构化  
            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/embedded/116562.html

相关文章

常见项目场景题2(多次输错密码禁止登录,分布式下多线程抢夺资源)

多次输错密码后如何禁止一定时间内用户再次登录 通常使用 IP 地址为单位来进行限制&#xff0c;而非具体的用户。这样可以减少误伤其他用户的可能性。 &#xff08;一个非法用户可能会拿他人的账号不断尝试登录&#xff09; 同时&#xff0c;以 IP 地址为单位进行限制还可以避…

【AIGC】ChatGPT提示词解析:如何生成爆款标题、节日热点文案与完美文字排版

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;情绪化的吸睛爆款标题提示词使用方法 &#x1f4af;紧跟节日热点生成文案提示词使用方法 &#x1f4af;高效文字排版技巧提示词使用方法 &#x1f4af;小结 &#x1f4af…

HtmlCss 基础总结(基础好了才是最能打的)五

Html&Css 基础学习回顾总结 Html&Css 基础总结&#xff08;基础好了才是最能打的&#xff09;一 Html&Css 基础总结&#xff08;基础好了才是最能打的&#xff09;二 Html&Css 基础总结&#xff08;基础好了才是最能打的&#xff09;三 Html&Css 基础总结…

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …

spark的stage划分的原理

在 Apache Spark 中&#xff0c;stage 是执行作业时的重要执行单元。一个 Spark 作业会被划分为若干个 stage&#xff0c;每个 stage 由一组可以并行执行的任务组成。这种划分主要依赖于 RDD 中的操作类型&#xff08;窄依赖和宽依赖&#xff09;。下面我们来讨论 Spark stage …

Linux 中 man手册基础 与 man.vim 和 ctags的安装使用

man手册基础 查找命令&#xff1a;Man [section] [所查找…的名字] Linux的man很强大&#xff0c;该手册分成很多section&#xff0c;使用man时可以指定不同的section来浏览&#xff0c;各个section意义如下&#xff1a; 1 - commands 2 - system calls 3 - library calls 4 -…

React 启动时webpack版本冲突报错

报错信息&#xff1a; 解决办法&#xff1a; 找到全局webpack的安装路径并cmd 删除全局webpack 安装所需要的版本

【Linux笔记】如何将内容从一个文件复制到另一个文件

比如&#xff1a;将文件tmp_file.txt中的部分数据&#xff0c;复制到file01.txt中去 tmp_file.txt文中内容&#xff1a; file01.txt为空文档 一、使用vi编辑器 I、文件中直接使用:e 目标文件进行切换文件复制 1、打开被复制文件 vi tmp_file.txt 2、进入一般命令模式 默认情况为…