python-3.x 当试图提取只有标题标签信息从html文件的整个剩余的html内容打印出来

wj8zmpe1  于 4个月前  发布在  Python
关注(0)|答案(2)|浏览(64)

我在一台运行windows10的64位windows机器上,在anaconda navigator 2.4.0中运行vscode v1.85.1。vscode中的python版本是3.9.12。我正在尝试简单地提取一个html文件的标题标签的内容,该文件与我的python脚本位于同一个目录中。
当我为元素发出print命令时,它会按预期显示。然而,当我试图只提取title标签的内容时,脚本会输出html文件的全部内容。
下面是HTML文件:

<!doctype html>
<html class="no-js" lang="">
    <head>
        <title>Test - A Sample Website</title>
        <meta charset="utf-8">
        <link rel="stylesheet" href="css/normalize.css">
        <link rel="stylesheet" href="css/main.css">
    </head>
    <body>
        <h1 id='site_title'>Test Website</h1>
        <hr></hr>
        <div class="article">
            <h2><a href="article_1.html">Article 1 Headline</a></h2>
            <p>This is a summary of article 1</p>
        </div>
        <hr></hr>
        <div class="article">
            <h2><a href="article_2.html">Article 2 Headline</a></h2>
            <p>This is a summary of article 2</p>
        </div>
        <hr></hr>
        <div id='footer'>
            <p>Footer Information</p>
        </div>
        <script>
        var para = document.createElement("p");
        var node = document.createTextNode("This is text generated by JavaScript.");
        para.appendChild(node);
        var element = document.getElementById("footer");
        element.appendChild(para);
        </script>
    </body>
</html>

字符串
下面是我的Python代码:

from requests_html import HTML

with open('simple.html') as html_file:
    source = html_file.read()
    html = HTML(html=source)

match = html.find('title')
print(match[0])


当我运行上述程序时,我得到了我所期望的结果:PS C:\Users\Terry\Anaconda脚本> c:; cd 'c:\Users\Terry\Anaconda Scripts';& 'C:\Users\Terry\anaconda3\python.exe' 'c:\Users\Terry.vscode\extensions\ms-python.python-2023.22.1\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher' '49312' '--' 'C:\Users\Terry\Anaconda脚本\Python\scraping\rhtml-demo.py'

<元素'title' >

PS C:\Users\Terry\Anaconda
但是当我尝试使用print(match[0].html)提取标题块的实际内容时,我期望得到如下输出:测试-示例网站
.相反,输出不会在结束标记处停止,而是从标题标记开始打印文件的其余内容:

<title>Test - A Sample Website</title>
<meta charset="utf-8"/>
<link rel="stylesheet" href="css/normalize.css"/>       
<link rel="stylesheet" href="css/main.css"/>
<body>


等等,等等,一直到最后。
我从youtube上的一个教程中得到了代码,视频评论并不表明其他人也有过同样的问题,这就是为什么我在这里问。
如果你能帮忙的话,我将不胜感激。
谢谢

3duebb1j

3duebb1j1#

元素的HTML表示,包括其子元素,由requests_html中的html属性返回。由于title标签是<head>元素的一部分,因此调用match[0].html将返回元素的完整内容,而不仅仅是<title>。而不是使用.html,使用.text属性只提取<title>标记的文本内容。text属性返回元素的文本内容,这是您想要的。

from requests_html import HTML

with open('simple.html') as html_file:
    source = html_file.read()
    html = HTML(html=source)

match = html.find('title', first=True)  
if match:
    print(match.text)
else:
    print("Title tag not found.")

字符串

ppcbkaq5

ppcbkaq52#

看起来好像问题是在我的anaconda环境中使用vscode。python脚本本身在我的Linux环境中工作正常。所以我现在关闭这个问题。

相关问题