将html解析为json
html2json的Python项目详细描述
使用json中定义的模板将html网页转换为json数据。
安装
这个包在pypi上提供。只需使用pip install -U html2json
来安装它。然后可以使用from html2json import collect
导入它。
API
方法是collect(html, template)
。html
是加载为字符串的页面的html,template
是加载为python对象的模板的json。
注意,html必须包含根节点,如<html>...</html>
或<div>...</div>
。
模板语法
- 基本语法是
keyName: [selector, attr, [listOfRegexes]]
。selector
是一个css选择器(由lxml支持)。- 当选择器为
null
时,根节点本身是匹配的。 - 当无法匹配选择器时,将返回
null
。
- 当选择器为
attr
与属性值匹配。当内部文本为空时,可以null
匹配内部文本或外部文本。- 正则表达式列表
[listOfRegexes]
支持两种形式的正则表达式操作。列表中的操作按顺序执行。- 替换:
s/regex/replacement/g
。g
对于多个替换是可选的。 - 提取:
/regex/
。
- 替换:
例如:
{"Color":["head link:nth-of-type(1)","href",["/\\w+(?=\\.css)/"]],}
- 作为json,嵌套结构很容易构建。
{"Cover":{"URL":[".cover img","src",[]],"Number of Favorites":[".cover .favorites","value",[]]},}
- 可以使用另一种简化语法
keyName: [subRoot, subTemplate]
。subRoot
每个子条目的新根的css选择器。subTemplate
是每个条目的递归子模板。
例如,前面的示例可以简化为以下内容。
{"Cover":[".cover",{"URL":["img","src",[]],"Number of Favorites":[".favorites","value",[]]}],}
- 要按照同一子模板提取子项列表,列表语法为
keyName: [[subRoot, subTemplate]]
。请注意与前面语法的区别(围绕[
和]
)。subRoot
是每个子条目的新根的css选择器。subTemplate
是每个条目的递归子模板。
例如:
{"Comments":[[".comments",{"From":[".from",null,[]],"Content":[".content",null,[]],"Photos":[["img",{"URL":["","src",[]]}]]}]]}