当前位置: 首页 > article >正文

初始爬虫6

数据提取

        

数据提取总结  
    响应分类  
        结构化  
            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 json

headers = {
    '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 etree

text = '''
<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.kler.cn/a/308317.html

相关文章:

  • 使用 unicorn 和 capstone 库来模拟 ARM Thumb 指令的执行(一)
  • Javaweb—Ajax与jQuery请求
  • 【大数据测试HBase数据库 — 详细教程(含实例与监控调优)】
  • UDP协议和TCP协议之间有什么具体区别?
  • C++初阶:类和对象(上)
  • 除了 Mock.js,前端还有更方便的 Mock 数据工具吗?
  • PostgreSQL15.x安装教程
  • Vert.x初探
  • react native(expo)选择图片/视频并上传阿里云oss
  • Java数据存储结构——二叉查找树
  • 在linux注册服务并开机启动springboot程序
  • 使用canal.deployer-1.1.7和canal.adapter-1.1.7实现mysql数据同步
  • 探索轻量级语言模型 GPT-4O-mini 的无限可能
  • 面试常见题之PG数据库
  • 【工作流集成】springboot+vue工作流审批系统(实际源码)
  • 大数据之spark算子简介
  • SSM 框架 个人使用习惯 详细
  • vue3 + vite2 vue 打包后router-view空白
  • 用最新方案为数据密集型AI供能:将服务器农场沉入旧金山湾
  • 【YashanDB知识库】数据库获取时间和服务器时间不一致
  • Facebook的虚拟现实功能简介:社交网络的新前沿
  • 腾讯地图SDK Android版开发 11 覆盖物示例 4 线
  • 什么是蜘蛛池?有什么作用
  • 【原创】java+swing+mysql长途客车售票管理系统设计与实现
  • CACTI 0.8.7 迁移并升级到 1.2.7记录
  • 【零散技术】详解Odoo17邮件发送(一)