【问题标题】:Python HTML parsing: removing excess HTML from get request outputPython HTML解析:从获取请求输出中删除多余的HTML
【发布时间】:2018-06-04 16:52:16
【问题描述】:

我想做一个简单的 python 脚本来自动化从 IP 摄像机的 SD 卡中提取 .mov 文件的过程。 IP 摄像机型号支持返回包含 .mov 文件信息的 HTML 的 http 请求。到目前为止我的python脚本..

from bs4 import BeautifulSoup
import requests
page = requests.get("http://192.168.1.99/form/getStorageFileList?type=3")
soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify())

输出:

NAME2041=Record_continiously/2018-06-02/8/MP_2018-06-03_00-33-15_60.mov

我只想返回 MOV 文件。所以删除:

"NAME2041=Record_continiously/2018-06-02/8/"

我是使用 python 解析 HTML 的新手,所以我对功能有点困惑。

返回的 HTML 是否被视为字符串?如果是这样,我知道它将是不可变的,我将不得不创建一个新字符串,而不是“剥离”先前存在的字符串。

我试过了:

page.replace("NAME2041=Record_continiously/2018-06-02/8/","")

我收到一个属性错误。有谁知道任何可以实现这一目标的方法?

这是我正在使用的 HTML 示例...

<html>
<head></head>
<body>
000 Success NUM=2039 NAME0=Record_Continuously/2018-06-04/10/MP_2018-06-04_12-17-38_60.mov SIZE0=15736218 
NAME1=Record_Continuously/2018-06-04/10/MP_2018-06-04_12-16-37_60.mov SIZE1=15683077
NAME2=Record_Continuously/2018-06-04/10/MP_2018-06-04_12-15-36_60.mov SIZE2=15676882
NAME3=Record_Continuously/2018-06-04/10/MP_2018-06-04_12-14-35_60.mov SIZE3=15731539 
</body>
</html>

【问题讨论】:

    标签: python html parsing web-scraping


    【解决方案1】:

    使用带有负索引的str.split

    例如:

    page = "NAME2041=Record_continiously/2018-06-02/8/MP_2018-06-03_00-33-15_60.mov"
    print( page.split("/")[-1])
    

    输出:

    MP_2018-06-03_00-33-15_60.mov
    

    【讨论】:

    • 谢谢!这行得通。唯一的问题是,随着相机捕捉事件,会有数百个这样的字符串出现,所有这些字符串都有不同的时间和日期。如何在多个摄像机和 .mov 剪辑中使用此方法?
    • 您能否展示您的数据样本。这些字符串在列表中吗?
    • 发出get请求后返回的数据只是简单的HTML。只有 HTML 标签和 body 标签,除非我查看源代码或使用 bs4 美化,否则它非常混乱。我假设数据在列表中,但由于缺乏经验,我不确定。这是数据:000 成功 NUM=2039 NAME0=Record_Continuously/2018-06-04/10/MP_2018-06-04_12-17-38_60.mov SIZE0=15736218 NAME1=Record_Continuously/2018-06-04/10/MP_2018- 06-04_12-16-37_60.mov SIZE1=15683077 NAME2=Record_Continuously/2018-06-04/10/MP_2018-06-04_12-15-36_60.mov SIZE2=15676882
    • 你可以在你的问题中发布 html 吗?
    • 当然没问题,我继续使用我正在使用的 HTML 编辑我的问题。
    【解决方案2】:

    正如你在这里要求解释你的代码:

    # import statements
    from bs4 import BeautifulSoup  
    import requests
    
    page = requests.get("http://192.168.1.99/form/getStorageFileList?type=3")  # returns response object
    soup = BeautifulSoup(page.content, 'html.parser')  # 
    

    page.content返回响应的字符串内容

    您将这个(page.content) 字符串内容传递给BeautifulSoup 类,该类使用两个参数初始化您的内容(page.content) 作为字符串和解析器,这里是html.parser

    soupBeautifulSoup的对象

    .prettify() 是用于漂亮打印内容的方法

    在字符串切片中,您可能会因内容长度而导致结果失败,因此最好按照@Rakesh 的建议拆分您的内容,这是您情况下的最佳方法。

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2015-03-04
      • 2020-06-10
      • 1970-01-01
      • 2017-02-03
      相关资源
      最近更新 更多