我在一台运行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上的一个教程中得到了代码,视频评论并不表明其他人也有过同样的问题,这就是为什么我在这里问。
如果你能帮忙的话,我将不胜感激。
谢谢
2条答案
按热度按时间3duebb1j1#
元素的HTML表示,包括其子元素,由requests_html中的html属性返回。由于title标签是
<head>
元素的一部分,因此调用match[0].html
将返回元素的完整内容,而不仅仅是<title>
。而不是使用.html
,使用.text
属性只提取<title>
标记的文本内容。text属性返回元素的文本内容,这是您想要的。字符串
ppcbkaq52#
看起来好像问题是在我的anaconda环境中使用vscode。python脚本本身在我的Linux环境中工作正常。所以我现在关闭这个问题。