如何使用正则表达式获取网页上所有唯一的 HTML 标签?



我有一个来自HTML页面的html源代码:

import requests
text = requests.get("https://en.wikipedia.org/wiki/Collatz_conjecture").text

我想做的是计算此页面上唯一 HTML 标记的数量。

例如:<head><title>。结束标记不计算在内(<head></head>将只计算一次(。

是的,我知道使用HTML解析器(例如Beautiful Soup(要容易得多,但我想仅使用正则表达式来完成此操作。

我已经蛮力计算了一下,答案就在大约 60 个唯一标签的范围内。 我将如何做到这一点?

我已经尝试使用re.findall(),但无济于事。

由于答案是 60 左右,我希望输出是:

"Number of unique HTML tags: 60"

以下内容将从相关网址中产生 63 个 URL

import requests
import re
url = "https://en.wikipedia.org/wiki/Collatz_conjecture"
text = requests.get(url).text
url_pattern = r"((http(s)?://)([w-]+.)+[w-]+[.com]+([w-.,@?^=%&amp;:/~+#]*[w-@?^=%&amp;/~+#])?)"
# Get all matching patterns of url_pattern
# this will return a list of tuples 
# where we are only interested in the first item of the tuple
urls = re.findall(url_pattern, text)
# using list comprehension to get the first item of the tuple, 
# and the set function to filter out duplicates
unique_urls = set([x[0] for x in urls])
print(f'Number of unique HTML tags: {len(unique_urls)} found on {url}')

外:

Number of unique HTML tags: 63 found on https://en.wikipedia.org/wiki/Collatz_conjecture

拜托!不要在正则表达式中使用 bs4 等模块解析 HTML。但是,如果您坚持这样做,请执行以下操作:

import requests
import re
url = 'https://en.wikipedia.org/wiki/Collatz_conjecture'
text = requests.get(url).text
tags = re.findall('<[^>]*>',text)
total=[]
for i in range(len(tags)):
total.append(re.match('<[^s>]+',tags[i]).group())
total=[elem+'>' for elem in total]
r= re.compile('</[^<]')
unwanted =list(filter(r.match,total))
un=['<!-->','<!--[if>','<!DOCTYPE>','<![endif]-->']
unwanted.extend(un)
final=[x for x in list(set(total)) if x not in set(unwanted)]
print('Number of Unique HTML tags : ',len(final))

最新更新