shell解析HTML
文章目录
- shell解析html
- 安装方法
- 使用方法
- xpath地址获取方法
- 源码及编译
- 源码
- 编译
- 相关问题
发布于:2022-01-17 22:02:39
shell解析html
没有找到shell有这个功能,百度shell解析xpath所说不知都是什么,命令没找到包也没装上,很怀念Python这方面的优异,索性自己封装了一层.
采用Python语言,写好后打包制作而成,源码及打包命令见文章尾部,之所以打包一下因为这样可以不依赖Python环境只需要在Linux系统主机即可执行(基于centos 7系统测试),如果主机有Python环境和相关依赖直接执行代码文件也可.
如有疑问或问题欢迎大佬留言.
下载地址(百度网盘):
链接: https://pan.baidu.com/s/1eboXIJD-5JR30BRRsPTNjQ?pwd=9snv 提取码: 9snv 复制这段内容后打开百度网盘手机App,操作更方便哦
蓝奏云网盘
https://wwi.lanzouw.com/i7QpFywyjed
安装方法
[root@emr-header-01 tmp]# ls
xpath.tar.gz
[root@emr-header-01 tmp]# tar xf xpath.tar.gz
[root@emr-header-01 tmp]# ls
xpath xpath.tar.gz
[root@emr-header-01 tmp]# chown 755 xpath
[root@emr-header-01 tmp]# mv xpath /usr/bin/
[root@emr-header-01 tmp]#
- 下载上传
- 解压,执行
tar xf xpath.tar.gz
- 授权,如果没有执行权限的话.
chown 755 xpath
- 移动到bin目录下
mv xpath /usr/bin/
.
使用方法
首先准备一个页面,下载保存到本地.
示例网址: https://so.gushiwen.cn/shiwenv_1fecfb7d6ac8.aspx
网站页面内容:
# 开始获取 将内容保存为文件
[root@emr-header-02 ~]# curl -o caiwei https://so.gushiwen.cn/shiwenv_1fecfb7d6ac8.aspx% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 34827 0 34827 0 0 423k 0 --:--:-- --:--:-- --:--:-- 419k
[root@emr-header-02 ~]# ls
anaconda-ks.cfg caiwei tmp xpath.tar.gz zookeeper.out
[root@emr-header-02 ~]#
解析内容使用示例
# 获取文本内容
[root@emr-header-02 ~]# xpath --file=caiwei --path="/html/body/div[2]/div[1]/div[2]/div[1]/div[2]/p/text()"
采薇采薇,薇亦作止。曰归曰归,岁亦莫止。 靡室靡家,猃狁之故。不遑启居,猃狁之故。
采薇采薇,薇亦柔止。曰归曰归,心亦忧止。 忧心烈烈,载饥载渴。我戍未定,靡使归聘。
采薇采薇,薇亦刚止。曰归曰归,岁亦阳止。 王事靡盬,不遑启处。忧心孔疚,我行不来!
彼尔维何?维常之华。彼路斯何?君子之车。 戎车既驾,四牡业业。岂敢定居?一月三捷。
驾彼四牡,四牡骙骙。君子所依,小人所腓。 四牡翼翼,象弭鱼服。岂不日戒?猃狁孔棘!
昔我往矣,杨柳依依。今我来思,雨雪霏霏。 行道迟迟,载渴载饥。我心伤悲,莫知我哀!
# 取其中的某个元素 如src='xxx'
[root@emr-header-02 ~]# xpath --file=caiwei --path="/html/body/div[2]/div[1]/div[2]/div[2]/div[1]/img/@src"
https://song.gushiwen.cn/siteimg/shou-cang.png
# 当出现异常时会返回不同的状态码,如果成功则返回0,可以以此判断执行是否成功,示例
[root@emr-header-02 ~]# xpath --file=caiwei.html --path="//*[@id="sonsyuanwen"]/div[1]/h1/text()"
没有找到文件!
[root@emr-header-02 ~]# echo $?
2
[root@emr-header-02 ~]# xpath --file=caiwei --path="//*[@id="sonsyuanwen"]/div[1]/h1/text()a"
xpath解析异常!
[root@emr-header-02 ~]# echo $?
3
# 取文章名称,获取结果成功返回 0
[root@emr-header-02 ~]# xpath --file=caiwei --path="/html/body/div[2]/div[1]/div[2]/div[1]/h1/text()"
采薇
[root@emr-header-02 ~]# echo $?
0
[root@emr-header-02 ~]# xpath --help
Usage: xpath [OPTIONS]Options:--file TEXT read code file name.--path TEXT xpath path.--help Show this message and exit.
[root@emr-header-02 ~]#
xpath地址获取方法
以Google浏览器为例
更多相关操作参考:
https://www.w3school.com.cn/xpath/index.asp
https://www.runoob.com/xpath/xpath-syntax.html
https://baike.baidu.com/item/XPath/5574064?fr=aladdin
源码及编译
源码
from lxml import etree
import click
import sys# 获取参数
@click.command()
@click.option('--file', help='read code file name.')
@click.option("--path",help="xpath path.")def parsing(file,path):# 判断是否传入足够的参数if file == None or path == None:print("请指定--file和--path,或添加参数--help查看帮助.")#return Falsesys.exit(1)try:# 打开文件 读取数据with open(file,mode="r",encoding='utf8') as r:htmlData = r.read()except FileNotFoundError:print("没有找到文件!")sys.exit(2)# 装载HTML代码数据xpath = etree.HTML(htmlData)try:# 解析地址 获取对应返回值data = xpath.xpath(path)except:print("xpath解析异常!")sys.exit(3)if data == []:print("没有找到任何数据,请检查地址是否正确")else:# 循环列表 打印内容for i in data:print(i)
if __name__ == '__main__':# parsing("jianjia.html",'/html/body/div[2]/div[1]/div[2]/div[1]/div[2]/p/text()')parsing()
python所写,主要使用了lxml包的etree.
编译
首先有一台装好Python3的主机,配置好pip.
安装打包命令
pip install pyinstaller
在代码文件放置位置执行
# main.py 为文件名称
pyinstaller -F main.py
# 执行完毕后在当前目录下有个dist目录,里面为二进制可执行包.
相关问题
- 从浏览器复制的xpath地址解析不到任何东西
可参考:Python lxml模块xpath解析不到内容
解决方案:Linux可以先使用curl将页面保存到本地,然后用浏览器打开保存的文件,F12控制台中重新复制xpath地址.
shell解析HTML相关推荐
- sqlmap os shell解析
0x00 Background 最近遇到测试环境,最后利用sqlmap的--os-shell参数取得shell.一直以来,对这个参数的工作原理不是十分的清晰.大致的思想应该是将脚本插入到数据库中,然后 ...
- shell 解析 json
如果 想利用 shell 从 json 数据 中 解析出某个字段, 可以 利用 正则匹配, 比如 想 解析出 "spanId":"8461203268866670975& ...
- bash/shell 解析命令行参数工具:getopts/getopt
转载自:https://my.oschina.net/leejun2005/blog/202376 bash 脚本中,简单点的参数选项,我们可以直接用位置参数 $1 $2 这样来获取处理了,例如下面这 ...
- linux shell 解析文本文件,linux Shell 全解析
Shell 函数Shell 字符串 单引号 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的: 单引号字串中不能出现单引号(对单引号使用转义符后也不行). 双引号 双 ...
- linux shell解析1
简介 我们常常提到的Shell其实是比较狭隘的定义,一般来说,在linux里,所谓的shell,就是指BASH这个文字模式的shell.但是广义的Shell也可以是KDE之类的图形界面控制软件,因为它 ...
- Shell解析curl返回的json数据
主要介绍两种方式,第一种是使用jq(需要单独安装),第二种是使用python(建议). 一.使用jq 1.安装JQ 方式1:下载二进制文件 wget -O jq https://github.com/ ...
- shell解析html文件,[Shell] Shell 生成 HTML脚本,可显示表格
Shell 生成 HTML脚本 生成的格式不好看,以后要多改进. [mon@oracle6 source]$ more gen_html #!/bin/bash datetime=`date +&qu ...
- shell解析json之jq工具
工具下载地址及各版本的安装方式,我常用的是把工具包下载下来直接用,不安装: https://stedolan.github.io/jq/manual/#example1 test.json { ...
- shell解析xml文件
1.test.xml <?xml version="1.0" encoding="UTF-8"?> <license><pos&g ...
- c语言shell解析配置文件,.vimrc 配置文件( 带注释)
"============================================================================== " => Ge ...
最新文章
- 【力扣网练习题】实现 strStr()
- 一个简单的slider滑块组件
- vue前端表格插件_Grid.js - 跨框架的前端表格插件
- salt的远程部署java-1.6.0-openjdk
- 安装VS2008新挫折
- .NetCore中三种注入方式的思考
- 常用牛人主页链接(计算机视觉、模式识别、机器学习相关方向,陆续更新。。。。)【转】...
- idea 关于2020maven home directory的路径
- webpack vs gulp 一张图说明
- Kettle 添加备注
- javascript 构造函数方式定义对象 (转载)
- 05、汇编语言和汇编软件
- 【复合五点高斯-勒让德公式】
- progress GAN
- 使用gradle开启multiDex时,如何配置MainDex
- github Topic 功能 | github 常用条件查询
- 微信录音功能在哪里?图文教学,轻松学会微信隐藏技能
- UVa 10101 - Bangla Numbers
- Flink流批一体化处理框架
- 怎么查看mysql密码_怎么查看mysql密码