用Python获取网页标题

3 投票
4 回答
7131 浏览
提问于 2025-04-16 17:25

我有超过5000个网页,我想获取它们的标题。在我的项目中,我使用了BeautifulSoup这个HTML解析器,像这样。

soup = BeautifulSoup(open(url).read())
soup('title')[0].string

但是这样花了很多时间。为了获取一个网页的标题,我需要读取整个文件并构建解析树(我觉得这可能是导致延迟的原因,如果我错了请纠正我)。

有没有其他更简单的方法可以在Python中做到这一点呢?

4 个回答

1

你甚至可以使用简单的字符串方法

html = '<html> lots of crap <title>Title</title> even more crap </html>'
start = html.find('<title>') + 7 # Add length of <title> tag
end = html.find('</title>', start)
title = html[start:end]

不过,这只是保证了在网页中,<title> 出现在 </title> 之前,并不能保证它是在 <head> 部分或者其他地方。

另外,你还应该验证一下你是否真的认为是BeautifulSoup解析占用了大部分时间。(我猜,open(url).read() 处理5000个资源也会花不少时间。无论你怎么“解析”HTML,这个时间是无法消除的。)

1

你可以使用正则表达式来完成这个任务,但如果页面格式不正确,这种方法可能会出问题。大致上可以这样写:

import re
titleRE = re.compile("<title>(.+?)</title>")
title = titleRE.search(s).group(1)
3

如果你直接用一个简单的正则表达式,那肯定会快很多,因为 BeautifulSoup 的速度比较慢。你可以这样做:

import re
regex = re.compile('<title>(.*?)</title>', re.IGNORECASE|re.DOTALL)
regex.search(string_to_search).group(1)

撰写回答