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

python语言day9 正则表达式 和 xpath 解析html

正则表达式:

        正则表达式的语法:

                元字符: \D  \d    \w \W    .     [ ]

                量词:  ?   *

                惰性匹配:

                       玩儿(?P<name>.*?)游戏:

                                匹配到第一个游戏结束,name = 匹配的文本。

                        玩儿(?P<name>.*)游戏:

                                一直匹配到不符合条件元字符.才结束

        正则表达式获取html内容:

                获取豆瓣top250网页的电影名字及年份:

import re
import requestsurl = "https://movie.douban.com/top250"
head = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
}
resp = requests.get(url,headers = head)
resp.encoding = "utf-8"regex = re.compile('<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?<p class="">(?P<year>.*?)</p>',re.S)
request = regex.finditer(resp.text)
for item in request:print(item.group("name"))year = item.group("year")year_new =re.search("\d+",year)print(year_new.group())

xpath:

         依赖下载:

pip install lxml

        创建xpath对象et:

from lxml import html
etree =  html.etreefile = open('mybaidu.html',mode = 'r',encoding = 'utf-8')
text = file.read()et = etree.HTML(text)
print(et)

         获取标签对象、标签属性、标签内容:

        text()  获取文本

        @class  获取属性

        /*  匹配任意标签

        //  当前标签下所有标签

      【@class=''  ''】限定属性

print(et.xpath("/html/head/title/text()"))  #['百度一下,你就知道', '谷歌一下,你就知道']
print(et.xpath("/html/*/title/text()"))   #['百度一下,你就知道', '谷歌一下,你就知道']
print(et.xpath("/html/head/title[@class='限定风格']/text()"))  #['百度一下,你就知道']
titles = et.xpath("//title/text()")
for title in titles:print(title) #百度一下,你就知道#谷歌一下,你就知道
print(et.xpath("/html/head/title/@name")) #['标题']
print(et.xpath("//@name")) #['referrer', '标题']

<!DOCTYPE html><!--STATUS OK-->
<html>
<head><meta http-equiv=content-type content=text/html;charset=utf-8 class="a"><meta http-equiv=X-UA-Compatible content=IE=Edge class="b"><meta content=always name=referrer class="c"><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title name="标题" class="限定风格">百度一下,你就知道</title><title>谷歌一下,你就知道</title>
</head>
<body link=#0000cc><a href="">a</a><a href="">b</a>
</body>
</html>
from lxml import html
etree =  html.etreefile = open('mybaidu.html',mode = 'r',encoding = 'utf-8')
text = file.read()et = etree.HTML(text)
print(et)
htlm =  et.xpath('/html')print(et.xpath("/html/head/title/text()"))  #['百度一下,你就知道', '谷歌一下,你就知道']
print(et.xpath("/html/*/title/text()"))   #['百度一下,你就知道', '谷歌一下,你就知道']
print(et.xpath("/html/head/title[@class='限定风格']/text()"))  #['百度一下,你就知道']titles = et.xpath("//title/text()")
for title in titles:print(title) #百度一下,你就知道#谷歌一下,你就知道print(et.xpath("/html/head/title/@name")) #['标题']
print(et.xpath("//@name")) #['referrer', '标题']metas = et.xpath("/html/head/meta/@class")
for meta in metas:print(meta) #a  #b  #ca_s = et.xpath("/html/body/a")
for a in a_s:print(a.xpath("./text()")) #['a']  #['b']

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • QT:事件机制
  • 计算机基础知识复习8.14
  • redis随笔记
  • 位运算使用
  • 汇编语言lea指令取数组偏移地址
  • C++:priority_queue类
  • JavaScript class和正则
  • 10天速通Tkinter库——Day 5:使用config进行OptionMenu美化
  • Minio web控制台实现授权管理
  • 使用 nginx 搭建代理服务器(正向代理 https 网站)指南
  • 【Java】—— 使用Java编写程序找出100以内的质数
  • 理解类方法和静态方法:Python 中的高级函数
  • Nginx负载均衡调度状态
  • 哇哦--一起学习接口叭
  • XSS总结知识点+例题实操
  • CentOS 7 修改主机名
  • Git 使用集
  • IDEA 插件开发入门教程
  • Java 23种设计模式 之单例模式 7种实现方式
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MySQL的数据类型
  • Python利用正则抓取网页内容保存到本地
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 警报:线上事故之CountDownLatch的威力
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何编写一个可升级的智能合约
  • 什么软件可以剪辑音乐?
  • 使用 QuickBI 搭建酷炫可视化分析
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​低代码平台的核心价值与优势
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #《AI中文版》V3 第 1 章 概述
  • (二)linux使用docker容器运行mysql
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)c52学习之旅-流水LED灯
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (转)Unity3DUnity3D在android下调试
  • (转)关于多人操作数据的处理策略
  • ***利用Ms05002溢出找“肉鸡
  • .DFS.
  • .NET CLR Hosting 简介
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net FrameWork总结
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • .so文件(linux系统)
  • @Import注解详解