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

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)

相关文章:

  • 2024最全前端面试系列(计算机网络)(非科班出身最薄弱的环节)
  • 系统架构设计师教程(清华第2版)<第1章 绪论>解读
  • 一个启动脚本例子
  • git 常用语句
  • Windows环境使用SpringBoot整合Minio平替OSS
  • 点击notify里面的通知,实现路由跳转
  • 学习Symfony框架
  • react框架,使用vite和nextjs构建react项目
  • datawhale大模型应用开发夏令营学习笔记一
  • 下拉选择输入框(基于elment-ui)
  • 【JavaEE】多线程代码案例(2)
  • 8.ApplicationContext常见实现
  • 【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验15 网络故障导致的路由环路问题
  • CPU通过网络将IP camera的RTSP流(H.264编码或是H.265编码)拉回, 交给GPU解码并显示的处理流程
  • 浅聊权限系统设计模型
  • 《深入 React 技术栈》
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • javascript数组去重/查找/插入/删除
  • Less 日常用法
  • Promise初体验
  • React 快速上手 - 07 前端路由 react-router
  • redis学习笔记(三):列表、集合、有序集合
  • SpringBoot几种定时任务的实现方式
  • tensorflow学习笔记3——MNIST应用篇
  • 从0到1:PostCSS 插件开发最佳实践
  • 简单实现一个textarea自适应高度
  • 聊聊sentinel的DegradeSlot
  • 强力优化Rancher k8s中国区的使用体验
  • 学习笔记TF060:图像语音结合,看图说话
  • 一道闭包题引发的思考
  • 一文看透浏览器架构
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 由插件封装引出的一丢丢思考
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (09)Hive——CTE 公共表达式
  • (C++17) optional的使用
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (二十四)Flask之flask-session组件
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)c52学习之旅-点亮LED灯
  • (十八)三元表达式和列表解析
  • (转)一些感悟
  • (转)重识new
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .DFS.
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 简单实现MD5
  • .NET 指南:抽象化实现的基类
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?