初始爬虫6

server/2024/9/22 15:41:54/

数据提取

        

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

相关文章

连续数组问题

目录 一题目&#xff1a; 二思路&#xff1a; 三代码&#xff1a; 一题目&#xff1a; leetcode链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二思路&#xff1a; 思路&#xff1a;前缀和&#xff08;第二种&#xff09;化0为-1hash&#xff1a; 这样可以把…

xinetd服务使用方法及案例

xinetd&#xff08;Extended Internet Services Daemon&#xff09;是一个网络服务守护进程&#xff0c;用于管理和控制多个网络服务的启动与停止。它的主要特点包括&#xff1a; 配置Telnet服务的xinetd文件案例 1. 文件位置&#xff1a;在 /etc/xinetd.d/ 目录下创建一个名…

远程连接MySQL并操作

配置MySQL开发环境 如果你使用的是基于Debian的系统&#xff08;如Ubuntu&#xff09;&#xff0c;可以在终端通过如下步骤安装MySQL开发包。 更新软件包列表 运行以下命令以确保你拥有最新的软件包列表。 sudo apt-get update安装libmysqlclient-dev开发包 执行以下命令以…

【开源免费】基于SpringBoot+Vue.JS教师工作量管理系统(JAVA毕业设计)

本文项目编号 T 043 &#xff0c;文末自助获取源码 \color{red}{T043&#xff0c;文末自助获取源码} T043&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Oracle SQL Developer:数据库开发与数据管理的利器

在数据库管理和开发领域&#xff0c;拥有一个强大而灵活的工具是至关重要的。Oracle SQL Developer 是 Oracle 公司提供的一个免费集成开发环境&#xff0c;它专为数据库开发、管理和数据建模而设计。本文将详细介绍 Oracle SQL Developer 的功能、特点以及如何使用它来执行数据…

C++:tinyxml2用于解析、操作和生成XML文件

TinyXML-2 是一个轻量级、简单易用的 C 库&#xff0c;用于解析、操作和生成 XML 文件。与其他 XML 库相比&#xff0c;TinyXML-2 旨在提供简单性和效率&#xff0c;特别适合嵌入式系统、游戏开发或需要快速处理 XML 的场景。它是 TinyXML 的继任者&#xff0c;更加轻量和快速&…

Vue3 Day7-全局组件、指令以及pinia

7.1 全局组件 App.vue <template><div><h2>我是父组件&#xff0c;下面是全局组件的内容</h2><HelloWorld></HelloWorld></div> </template> ​ <script setup> ​ </script> <style scoped></style&g…

大舍传媒:尼日利亚传统新闻媒体宣传助力新兴行业蓬勃发展

大舍传媒&#xff1a;尼日利亚传统新闻媒体宣传助力新兴行业蓬勃发展 在全球化的浪潮下&#xff0c;媒体作为信息传播的重要渠道&#xff0c;对于促进行业发展和推动社会进步扮演着举足轻重的角色。特别是在非洲大陆上人口最多、经济最发达的国家——尼日利亚&#xff0c;传统…