4-数据提取方法2(xpath和lxml)(6节课学会爬虫)

4-数据提取方法2(xpath和lxml)(6节课学会爬虫)

  • 1,Xpath语法:
    • (1)选择节点(标签)
    • (2)“//”:能从任意节点开始选择
    • (3)“@”符号的用途
    • (4)获取文本
    • (5)点前
  • 2,简单使用
    • (1)判断某个标签是否被选中
    • (2)选择当前页面的任何一个节点(双斜杠//)
    • (3)选择指定的标签
  • 3,Lxml(在代码中使用xpath语法)
    • (1)安装
    • (2)使用
    • (3)爬取豆瓣电影

1,Xpath语法:

Xpath是一门从HTML中提取数据的一门语言
Xpath helper插件:帮助我们从element中定位数据

  爬虫是爬不到element的内容的,这里使用插件只是让其帮助我们学习xpath中的语法,从url地址中的响应中提取数据,只有response内容和element中内容相同时,才可以使用此工具提取数据,否则只能看response内容才能去提取,当然xpath语法简单,看就能看到。

(1)选择节点(标签)

-- /html/head/meta:能够选中html下的head下的所有的meta标签

(2)“//”:能从任意节点开始选择

“//li”:当前页面下的所有li标签
“/html/head//link”:选择head下的所有link标签(head下的任意一级都会被选中)

(3)“@”符号的用途

定位元素:“//ul[@class="topic_ul"]/li”
选择class="topic_ul"的ul标签下的li标签
“/a/@href”: 选择a标签的href属性值

(4)获取文本

“/a/text()”: 获取文本(标签a中包含的文本)
“/a//text()”: 获取a标签下的所有文本,即便a标签下有其他标签,所有的文本都会得到

(5)点前

“./a”:当前节点下的a标签

相应方法可到w3cschool中查找,上面学到的已经能解决80%的问题了

@可以定位一个属性,一个节点
选择节点(标签)

2,简单使用

在这里插入图片描述

(1)判断某个标签是否被选中

在这里插入图片描述

如下,选择全部的meta都选择上了

在这里插入图片描述

(2)选择当前页面的任何一个节点(双斜杠//)

  我们如果从根路径,一个一个的去找太麻烦了,而且使用鼠标找到某一标签后,使用//可以得到当前页面的任意节点。
  可以选择整个页面下的任何一个li标签
在这里插入图片描述

(3)选择指定的标签

@符号能选择指定属性的值
[]能对选择的标签进行限定

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3,Lxml(在代码中使用xpath语法)

(1)安装

pip install lxml

(2)使用

from lxml import etreeelement = etree.HTML("html字符串")     #etree可以将HTML的字符串转换成一个对象
element.xpath("/html/head/meta")                         #此时可以对此对象使用xpath语法了

(3)爬取豆瓣电影

在这里插入图片描述

在这里插入图片描述

下方式爬取豆瓣电影排行榜的某一页的电影信息的爬虫程序

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/10 14:50
#@Author : 招财进宝
#@File : 09_try_lxml.py
#@Software: PyCharmimport requests
from lxml import etreeurl="https://movie.douban.com/chart"headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}response = requests.get(url,headers=headers)
html_str = response.content.decode()
#print(html_str)#使用etree处理数据html = etree.HTML(html_str)     #etree可以将HTML的字符串转换成一个对象
print(html)                          #一个element对象,可以进行xpath撰写#此时可以对此对象使用xpath语法了# #1.获取所有的电影的url地址
# url_list = html.xpath("//div[@class='indent']/div/table//div[@class='pl2']/a/@href")
# print(url_list)
#
# #2.获取所有的图片的url地址
# img_list = html.xpath("//div[@class='indent']/div/table//a[@class='nbg']/img/@src")
# print(img_list)#3.需要把每部电影组成一个字典,字典中是电影的多重数据,如标题,url,图片地址,评论数,评分
#  思路:#1.分组#2.每一组提取数据ret1 = html.xpath("//div[@class='indent']/div/table")           #通过此中方式先对每个模块进行分组
print(ret1)     #[<Element table at 0x278cea01708>, <Element table at 0x278bed91708>,共10个table的对象for table in ret1:item = {}item["title"]=table.xpath(".//div[@class='pl2']/a/text()")[0].replace("/","").strip()       #此处只有中文的电影名#print(item["title"])item["href"] = table.xpath(".//div[@class='pl2']/a/@href")[0]item["img"] = table.xpath(".//a[@class='nbg']/img/@src")[0]item["comment_num"] = table.xpath(".//span[@class='pl']/text()")[0]item["rating_num"] = table.xpath(".//span[@class='rating_nums']/text()")[0]print(item)

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

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

相关文章

计算机网络面试TCP篇之TCP三次握手与四次挥手

TCP 三次握手与四次挥手面试题 任 TCP 虐我千百遍&#xff0c;我仍待 TCP 如初恋。 巨巨巨巨长的提纲&#xff0c;发车&#xff01;发车&#xff01; PS&#xff1a;本次文章不涉及 TCP 流量控制、拥塞控制、可靠性传输等方面知识&#xff0c;这些知识在这篇&#xff1a; TCP …

第3章:数据结构

树 对稀疏矩阵的压缩方法有三种&#xff1a; 1、三元组顺序表 2、行逻辑连接的顺序表 3、十字链表 同义词才会占用同个位置&#xff0c;从而需要进行多次比较。这些关键字的第一个可以不是e的同义词&#xff0c;可以是排在e之前的关键字正好占了那个位置。 Dijkstra算法主要特点…

jenkins 发布服务到 windows服务器

1.环境准备 1.1 这些就不过多描述了&#xff0c;可以参考我的另一盘文章部署到linux。 jenkins 发布服务到linux服务器-CSDN博客 1.2 需要再windows上安装openssh 地址&#xff1a;Releases PowerShell/Win32-OpenSSH GitHub 到windows上执行安装&#xff0c;可以里面cmd命令…

Java的限制序列化和常用IO流

一.限制序列化 a.问题 出于安全考虑&#xff0c;对于一些比较敏感的信息(如用户密码)&#xff0c;应限制被序列化&#xff0c;如何实现? ◆使用transient关键字修改不需要序列化的对象属性 b.示例 ◆希望Person类对象中的年龄信息不被序列化 二.Java常用IO流有哪些&#x…

人脸特征68点识别 C++

1、加载一张图片 main函数&#xff1a; cv::Mat img cv::imread("5.jpg");vector<Point2f> points_vec dectectFace68(img);2、人脸68特征识别函数 在这里vector<Point2f> dectectFace68(Mat src) {vector<Point2f> points_vec;int* pResults …

【SpringCloud】Eureka源码解析 上

Eureka是一个服务发现与注册组件&#xff0c;它包含服务端和客户端&#xff0c;服务端管理服务的注册信息&#xff0c;客户端简化服务实例与服务端的交互。我们结合源码来分析下eureka组件的实现原理&#xff0c;内容分为上下两章&#xff0c;第一章分析eureka的服务注册&#…

ubuntu apt命令 出现红色弹框 Daemons using outdated libraries

1. 弹框没截图&#xff0c;是因为ubuntu22.04一个新特性导致的&#xff0c;由 needrestart 命令触发&#xff0c;默认情况是交互性质的&#xff0c;也就是会中断在这里需要手动要处理提示。 2. 修改/etc/needrestart/needrestart.conf 文件&#xff0c;将 #$nrconf{restart} …

大数据开发中如何计算用户留存及SQL示例

在大数据开发领域&#xff0c;用户留存是一个关键指标&#xff0c;它反映了产品吸引并保留用户的能力。 留存率的计算不仅有助于评估产品的健康状况&#xff0c;还能为产品优化和市场策略提供重要依据。 本文将详细介绍如何在大数据开发中计算用户留存&#xff0c;并附带具体…

精密空气加热器负载组

小型便携式 &#xff1a;精密空气加热器&#xff08;负载组&#xff09;能够对数据中心热通道/冷通道冷却系统进行全面测试。EAK 是一款 19 英寸机架式设备&#xff08;10U 高&#xff09;&#xff0c;可轻松安装到各种标准服务器机架中。通过集成可调节的热量水平&#xff08;…

C++ :lambda表达式

目录 lambda表达式书写格式&#xff1a; lambda表达式各部分说明&#xff1a; lambda的使用示范&#xff1a; 注意事项&#xff1a; 返回值类型可以省略&#xff0c;参数也可也省略&#xff1a; sort内部也可以直接写lambda表达式&#xff1a; 排序时利用lambda进行排序…

STM32MP135裸机编程:使用软件触发硬件复位

0 参考资料 STM32MP13xx参考手册.pdf 1 使用寄存器实现软件复位 1.1 复位电路概述 重点关注下面标红的路线&#xff1a; 通过这条路线可以清楚看到&#xff0c;我们可以通过设置RCC_MP_GRSTCSETR寄存器让RPCTL&#xff08;复位脉冲控制器&#xff09;给NRST&#xff08;硬件复…

苹果可能与谷歌合作推AI订阅服务;全国首个司法审判大模型在深圳上线

&#x1f989; AI新闻 &#x1f680; 苹果可能与谷歌合作推AI订阅服务 摘要&#xff1a;苹果宣布将与OpenAI合作推出Apple Intelligence&#xff0c;并有望在今年秋季与谷歌达成合作&#xff0c;接入Gemini。Meta的Llama因质量不佳被拒。苹果计划推出订阅模式的智能功能服务&…

kafka的工作原理与常见问题

定义 kafka是一个分布式的基于发布/订阅模式的消息队列&#xff08;message queue&#xff09;&#xff0c;主要应用于大数据的实时处理领域 消息队列工作原理 kafka的组成结构 kafka的基础架构主要有broker、生产者、消费者组构成&#xff0c;还包括zookeeper. 生产者负责发送…

算法09 日期相关模拟算法【C++实现】

这是《C算法宝典》算法篇的第09节文章啦~ 如果你之前没有太多C基础&#xff0c;请点击&#x1f449;专栏&#xff1a;C语法入门&#xff0c;如果你C语法基础已经炉火纯青&#xff0c;则可以进阶算法&#x1f449;专栏&#xff1a;算法知识和数据结构&#x1f449;专栏&#xff…

Java代码生成器(开源版本)

一、在线地址 Java在线代码生成器&#xff1a;在线访问 二、页面截图 三、核心功能 支持Mybatis、MybatisPlus、Jpa代码生成使用 antlr4 解析SQL语句&#xff0c;保证了SQL解析的成功率支持自定义包名、作者名信息支持自定义方法名、接口地址支持自定义选择是否生成某个方法…

数学建模(1):期末大乱炖

1 概述&#xff01;&#xff01; 1.1 原型和模型 原型&#xff1a;客观存在的研究对象称为原型&#xff0c;也称为“系统”、“过程”。 机械系统、电力系统、化学反应过程、生产销售过程等都是原型&#xff1b; 研究原型的结构和原理&#xff0c; 从而进行优化、预测、评价…

Jedis、Lettuce、RedisTemplate连接中间件

jedis就像jdbc一样&#xff0c;用于两个端直接的连接。 1.创建Spring项目 这里不过多赘述... 2.导入连接工具jedis 在pom文件中导入jedis的依赖。 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version&…

结合数据索引结构看SQL的真实执行过程

引言 关于数据库设计与优化的前几篇文章中&#xff0c;我们提到了数据库设计优化应该遵守的指导原则、数据库底层的索引组织结构、数据库的核心功能组件以及SQL的解析、编译等。这些其实都是在为SQL的优化、执行的理解打基础。 今天这篇文章&#xff0c;我们以MySQL中InnoDB存…

CleanMyMacX2024免费且强大的mac电脑系统优化工具

如果你的Mac电脑出现了存储空间不足、运行缓慢、电池电量消耗过快等问题&#xff0c;那么CleanMyMacX这款软件或许能为你提供解决方案。作为一款强大的系统优化工具&#xff0c;它能够帮助用户清理垃圾文件、优化内存和电池使用&#xff0c;从而提升Mac的性能表现&#xff0c;让…

后端之路第三站(Mybatis)——XML文件操作sql

一、XML映射文件是啥 前面我们学过了在Mapper接口用注解的方式来操作sql语句 那么XML映射文件就另一种操作sql语句的方法 为什么还要有这么个玩意&#xff1f; 我简单说就是&#xff1a;如果有的sql特别复杂的话&#xff0c;比如需要【动态sql】的话&#xff0c;就得用到XM…