我目前正在从事一个项目,在该项目中,我下载了一堆相关的html文件,并从中收集数据。我注意到的一件事是,即使html文件的整体格式相似,但有时各种文件使用不同的标签来存储相似的信息。
例如,在一个文件中,它可能是:
<html>
<head>
<p> Title: The GodFather </p>
<p> Author: Mario Puzo </p>
</head>
<html>
在另一个示例中,可能是:
<html>
<head>
<p> Heading </p>
<pre> Ebook from xyz site: Please donate to our foundation at www.abc.com
Title: The GodFather
Author: Mario Puzo
</pre>
</head>
</html>
我可以肯定地说,在所有html文件中,“ 标题:”和“ 作者:”都是常见的。我想提取“ 标题:”和“ 作者:”旁边的文本。 我想我用漂亮的汤来提取每个html文件。但是要提取标题和 Author ,使用正则表达式会是最好的吗?
答案 0 :(得分:0)
甚至不用担心美丽的汤,只需使用正则表达式即可:
re.findall(r'(?<=Author:).*?(?=<)', html.replace('\n', ''))
>>> [' Mario Puzo']
re.findall(r'(?<=Title:).*?(?=<)', html.replace('\n', ''))
>>> [' The GodFatherAuthor: Mario Puzo']
这将与Authors匹配,当然,它可能不适用于您的某些标题,因为它在另一个标签(如上所示)之前也包含“ Author”,在这种情况下,您可以对所有抓取的标题执行title.split('Author')[0]
,因为如果Author
不在字符串中,则此方法将不会更改字符串。