我'制作一个Telegram机器人,通过Telegram" Telegraph"提供网页服务。服务,这样我就可以通过即时加载来阅读页面。
因此,我可以节省移动数据并放弃烦人的广告。
因此,我需要一种方法将任何网页都提供给this library的createPage方法。
问题是网页可以包含任何标签,而电报只支持这些Html标签。
ALLOWED_TAGS = [
'a', 'aside', 'b', 'blockquote', 'br', 'code', 'em', 'figcaption', 'figure',
'h3', 'h4', 'hr', 'i', 'iframe', 'img', 'li', 'ol', 'p', 'pre', 's',
'strong', 'u', 'ul', 'video'
]
由于我是初学者,在此之前我曾经尝试了很多。
我尝试使用Beautifulsoup get_text
方法,但它修剪了所有标记。
这让我感到困扰,因为我仍然希望保留一些内容,例如<img>
,<a>
,<b>
,因为我仍希望能够看到图像和链接。
我也尝试使用python html.parser
,但我无法入侵它。
我也试过了一些在线服务,比如Mercury Spotlight Parser。
不错的服务,但它仍然保留了一些不需要的标签,如<div>
。
我已经做了一些黑客来摆脱这些,但我认为这项服务是不行的,因为它给了我unicode&#34;字符未找到&#34;解析德语变音字符时的(u + FFFD),如Möglichkeit
。
我理想的解决方案是一个函数,它将ALLOWED_TAGS
作为白名单,然后修剪不在此列表中的所有html标记。
这样的库/函数是否存在?
我在Ubuntu上使用Python3。
提前致谢。
答案 0 :(得分:1)
如果这些函数(及其中的元素)在allowed_tags
列表
def allowedTags(soup, allowed_tags):
tags = []
for tag in soup.find_all(allowed_tags) :
if all(t.name in allowed_tags for t in tag.find_all()) :
if tag not in tags and not any(str(tag) in str(t) for t in tags if t != tag) :
tags += [tag]
return tags
请注意,对于大页面来说这可能会非常慢(此页面为4.5秒)
我尝试使用tag.children
将时间减少到0.5秒,但我无法获得准确的结果