shell解析HTML


发布于: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]# 
  1. 下载上传
  2. 解压,执行tar xf xpath.tar.gz
  3. 授权,如果没有执行权限的话.chown 755 xpath
  4. 移动到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  Current
                                 Dload  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 False
        sys.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目录,里面为二进制可执行包.

相关问题

  1. 从浏览器复制的xpath地址解析不到任何东西
    可参考:Python lxml模块xpath解析不到内容
    解决方案:Linux可以先使用curl将页面保存到本地,然后用浏览器打开保存的文件,F12控制台中重新复制xpath地址.
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值