2

我目前正在做一个项目,我下载了一堆相关的 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 文件。但是要提取TitleAuthor,最好使用正则表达式吗?

4

1 回答 1

0

甚至不用为漂亮的汤费心,只需使用正则表达式:

re.findall(r'(?<=Author:).*?(?=<)', html.replace('\n', ''))
>>> [' Mario Puzo']

re.findall(r'(?<=Title:).*?(?=<)', html.replace('\n', ''))
>>> [' The GodFatherAuthor: Mario Puzo']

这将匹配作者,授予,它可能不适用于您的某些标题,因为它还在另一个标签之前包含“作者”(如上所示),在这种情况下,您可以title.split('Author')[0]对所有抓取的标题执行此操作,因为 ifAuthor不在字符串中方法不会改变字符串。

于 2018-11-07T01:04:51.027 回答