个人使用的两个模块处理html
清洗标签
官方文档 lxml
from lxml.html import clean
# 除了保留的attribute其他的删除
safe_attrs = frozenset(['controls', 'poster', 'src', 'href', 'alt'])
# 默认删除script之类的无用标签,若需保留则添加scripts=False
# 默认删除的有<script>, javascript, comments, style, <link>, <meta>等
cleaner = clean.Cleaner(safe_attrs_only=True, safe_attrs=safe_attrs)
content = cleaner.clean_html(html)
另PyQuery也可以方便移除指定的标签
from pyquery import PyQuery
doc = PyQuery(html)
doc.remove('script')
return str(doc)
补全html中的链接为绝对值
import lxml
content = lxml.html.fromstring(some_html_page)
content.make_links_absolute(url_for_some_html_page)
另bs4方式
from urllib.parse import urljoin
def make_links_absolute(soup, url):
for tag in soup.findAll('a', href=True):
tag['href'] = urljoin(url, tag['href'])
html压缩
文档 htmlmin
import htmlmin
content = htmlmin.minify(content, remove_comments=True, remove_all_empty_space=True)
# remove_comments 删除 HTML 中的注释
# remove_all_empty_space 这会删除标签之间的所有空白
print(content)