从url和html文档中解析元数据的模块
metadata-parser的Python项目详细描述
metadataparser是一个python模块,用于从web文档中提取元数据。
安装
==
安装建议
=====
我强烈建议您使用"请求"库版本2.4.3或更高版本
这不是必需的,但更好。在早期版本中,当存在底层重定向/404时,可能会出现未捕获的解码错误异常。最近对"requests"的修复改进了重定向处理、urllib3和urllib3错误。
features
==
*它从文档中提取尽可能多的元数据
*您可以设置查找元数据的"策略"(即仅接受opengraph或页面属性)
*lig重量但功能性(!)url验证
*日志记录是冗长的,但嵌套在`\u debug\uu`语句下,因此当设置pythonoptimize时,它会被编译掉
==1。这需要美化组4。
2。为了提高速度,它将用lxml实例化一个beautifulsoup解析器,如果不能加载lxml
3,则返回"none"(内部纯python)。URL验证不符合RFC,但尝试符合"真实世界"
*强烈建议您安装LXML以供使用。它要快得多。相当快。*
您还应该使用最新版本的lxml。我在某些版本上遇到了segfults问题<;2.3.x;如果可能的话,我建议使用最新的3.x。
默认的"策略"是按以下顺序查找:
og,dc,meta,page
og=opengraph
dc=dublincore
meta=metadata
page=page elements
您可以将策略指定为以上内容的逗号分隔列表。
"metadata"元素受"name"和"property"支持。
metadataparser对象还包装了一些方便的函数,这些函数可以在其他情况下使用,其目的是将指称的URL转换为格式良好的URL。
//www.example.com/path/to/file.html
,该文件指示一个规范URL,它是简单的"/file.html"。
此包将尝试将规范URL"重新装载"到"http://www.example.com/file.html"的绝对URL。如果最终结果不是有效的url,则返回none。
这与RFC不兼容。
RFC中存在一些允许"奇怪行为"的间隙。几乎这个包的任何用例都需要/期望"在野外"解析url的规则,而不是理论上的规则。
.
默认行为是使这些主机无效:
http://256.256.256.256
http://999.999.999.999
根据RFC,这些主机名将作为"IP地址"失败,但作为"域名"传递。然而在现实世界中,人们永远不会遇到这样的域名。
*唯一允许的非域主机名是"localhost"
默认行为是使这些主机无效:
http://example
http://examplecom
这些主机被视为有效主机,可能存在于本地网络或自定义主机文件中。然而,它们并不是公共互联网的一部分。
尽管这种行为破坏了rfc,但它大大减少了分析网页时生成的"误报"数量。如果要包含错误数据,可以将kwarg提交给"metadataparser."处理错误的url和编码的uri
ost网站发布者将图像定义为url
<;meta property="og:image"content="http://example.com/image.jpg"/>;
>有些将图像定义为编码的uri
<;meta property="og:image"content="data:image/png;base64,ivborw0kggoaaansuheugaaaaaaaaabcaqaaac1hawcaaaaacoleqvr42mnm+q8aac0bzx6f84gaaaasuvork5cyii="/>;
默认情况下,可以使用"get_metadata_link()"方法确保从元数据负载中提取有效的链接
>;>;导入元数据解析器
>;>;page=metadata解析器.metadataparser(url="http://www.example.com")
>>gt;打印页。get_metadata_link('image')
此方法接受kwarg"allow_encoded_uri"(默认为false)将返回图像而无需进一步处理:
>>gt;打印页。get_metadata_link('image',allow_encoded_ uri=true)
类似地,如果url是本地的……
<;meta property="og:image"content="/image.jpg"/>;
"获取元数据链接"方法将自动将其升级到域:
>;打印页。获取元数据链接('image')
http://example.com/image.jpg
此包尝试修复此问题。
默认情况下,"metadataparser"是用"require_public_netloc=true"和"allow_localhosts=true"构造的。
例如,这些都是有效的url:
http://example.com
http://1.2.3.4
http://localhost
http://127.0.0.1
http://0.0.0.0
r/>http://localhost
http://127.0.0.1
http://0.0.0.0
参数"require_public_global",默认为"true"。
ocalhost:8000'作为不正确的规范url,并将本地部分"/alt path/to/foo"重新装载到为文件提供服务的域上。绝大多数情况下,遇到这种"行为"时,这是预期的规范。
print page.get_discrete_url()
>;>;http://example.com/alt path/to/foo
.get_discrete_url()
>;>http://localhost:8000/alt path/to/foo
oo
警告
===
1.0将是一次完整的api大修。锁定您的版本以避免悲伤。
<0.9.19版本中断更改e 12暴露了现有包中的一些缺陷
1。` metadataparser.get_metadatas `替换为metadataparser.get_metadata `
=-
0.9.19版之前,建议使用"get_metadata"获取元数据,该方法将返回字符串(或不返回字符串)。
0.9.19版开始,建议使用gET元数据将使用"get_metadatas",它将始终返回一个列表(或不返回任何列表)。
此更改是因为库在存在重复项时错误地存储了单个元数据键值。
2。"parsedresult"负载存储混合内容,并跟踪其版本
在使用全列表格式和混合格式(字符串或列表)测试各种有效负载之后,混合格式的有效负载大小要小得多,性能影响可以忽略不计。新的"v"属性跟踪负载版本。将来,没有"v"属性的有效载荷将被解释为预版本控制格式。
3。` dublincore`有效负载可能是dict
<-
添加测试来处理dublincore数据。可能需要一个额外的属性才能正确地表示有效负载,因此始终返回至少包含名称+内容的dict(可能还有"lang"或"scheme"是最好的方法。
使用"获取元数据"将返回字符串(或无):
**来自URL**
>tadatas('title')
>;>gt;打印页。获取元数据('title',strategy=['og',])
>;>gt;打印页。获取元数据('title',strategy=['page','og','dc',])
**来自html**
>;>html="<;here>;""
>;>page=metadata\parser.metadataparser(html=html)
>;>;打印页。元数据
>;>;打印页。获取元数据('title')
>;>;打印页。获取元数据('title',strategy=['og',])
>;>;打印页。获取元数据('title',strategy=['page','og','dc',])
医学数据
==========
查找格式错误的数据非常常见。从"0.9.20"版本起,应使用以下方法允许格式不正确的表示:
>;>;page=metadata parser.metadataparser(html=html,支持格式不正确的=true)
>;>;parsed=page.parse(html=html,支持格式不正确的=true)
>;。>;parsed=page.parse(html=html,support_malformed=false)
上述选项将支持分析常见的格式错误选项。目前,这只关注生成twitter标记的替代(不正确)方法,但可能会扩展到
==
>在python3上构建时,可能需要一个"静态"顶级目录
安装
==
安装建议
=====
我强烈建议您使用"请求"库版本2.4.3或更高版本
这不是必需的,但更好。在早期版本中,当存在底层重定向/404时,可能会出现未捕获的解码错误异常。最近对"requests"的修复改进了重定向处理、urllib3和urllib3错误。
features
==
*它从文档中提取尽可能多的元数据
*您可以设置查找元数据的"策略"(即仅接受opengraph或页面属性)
*lig重量但功能性(!)url验证
*日志记录是冗长的,但嵌套在`\u debug\uu`语句下,因此当设置pythonoptimize时,它会被编译掉
2。为了提高速度,它将用lxml实例化一个beautifulsoup解析器,如果不能加载lxml
3,则返回"none"(内部纯python)。URL验证不符合RFC,但尝试符合"真实世界"
*强烈建议您安装LXML以供使用。它要快得多。相当快。*
您还应该使用最新版本的lxml。我在某些版本上遇到了segfults问题<;2.3.x;如果可能的话,我建议使用最新的3.x。
默认的"策略"是按以下顺序查找:
og,dc,meta,page
og=opengraph
dc=dublincore
meta=metadata
page=page elements
您可以将策略指定为以上内容的逗号分隔列表。
"metadata"元素受"name"和"property"支持。
metadataparser对象还包装了一些方便的函数,这些函数可以在其他情况下使用,其目的是将指称的URL转换为格式良好的URL。
//www.example.com/path/to/file.html
,该文件指示一个规范URL,它是简单的"/file.html"。
此包将尝试将规范URL"重新装载"到"http://www.example.com/file.html"的绝对URL。如果最终结果不是有效的url,则返回none。
这与RFC不兼容。
RFC中存在一些允许"奇怪行为"的间隙。几乎这个包的任何用例都需要/期望"在野外"解析url的规则,而不是理论上的规则。
.
默认行为是使这些主机无效:
http://256.256.256.256
http://999.999.999.999
根据RFC,这些主机名将作为"IP地址"失败,但作为"域名"传递。然而在现实世界中,人们永远不会遇到这样的域名。
*唯一允许的非域主机名是"localhost"
默认行为是使这些主机无效:
http://example
http://examplecom
这些主机被视为有效主机,可能存在于本地网络或自定义主机文件中。然而,它们并不是公共互联网的一部分。
尽管这种行为破坏了rfc,但它大大减少了分析网页时生成的"误报"数量。如果要包含错误数据,可以将kwarg提交给"metadataparser."处理错误的url和编码的uri
ost网站发布者将图像定义为url
<;meta property="og:image"content="http://example.com/image.jpg"/>;
>有些将图像定义为编码的uri
<;meta property="og:image"content="data:image/png;base64,ivborw0kggoaaansuheugaaaaaaaaabcaqaaac1hawcaaaaacoleqvr42mnm+q8aac0bzx6f84gaaaasuvork5cyii="/>;
默认情况下,可以使用"get_metadata_link()"方法确保从元数据负载中提取有效的链接
>;>;导入元数据解析器
>;>;page=metadata解析器.metadataparser(url="http://www.example.com")
>>gt;打印页。get_metadata_link('image')
此方法接受kwarg"allow_encoded_uri"(默认为false)将返回图像而无需进一步处理:
>>gt;打印页。get_metadata_link('image',allow_encoded_ uri=true)
类似地,如果url是本地的……
<;meta property="og:image"content="/image.jpg"/>;
"获取元数据链接"方法将自动将其升级到域:
>;打印页。获取元数据链接('image')
http://example.com/image.jpg
此包尝试修复此问题。
默认情况下,"metadataparser"是用"require_public_netloc=true"和"allow_localhosts=true"构造的。
例如,这些都是有效的url:
http://example.com
http://1.2.3.4
http://localhost
http://127.0.0.1
http://0.0.0.0
r/>http://localhost
http://127.0.0.1
http://0.0.0.0
参数"require_public_global",默认为"true"。
ocalhost:8000'作为不正确的规范url,并将本地部分"/alt path/to/foo"重新装载到为文件提供服务的域上。绝大多数情况下,遇到这种"行为"时,这是预期的规范。
print page.get_discrete_url()
>;>;http://example.com/alt path/to/foo
.get_discrete_url()
>;>http://localhost:8000/alt path/to/foo
oo
警告
===
1.0将是一次完整的api大修。锁定您的版本以避免悲伤。
<0.9.19版本中断更改e 12暴露了现有包中的一些缺陷
1。` metadataparser.get_metadatas `替换为metadataparser.get_metadata `
=-
0.9.19版之前,建议使用"get_metadata"获取元数据,该方法将返回字符串(或不返回字符串)。
0.9.19版开始,建议使用gET元数据将使用"get_metadatas",它将始终返回一个列表(或不返回任何列表)。
此更改是因为库在存在重复项时错误地存储了单个元数据键值。
2。"parsedresult"负载存储混合内容,并跟踪其版本
在使用全列表格式和混合格式(字符串或列表)测试各种有效负载之后,混合格式的有效负载大小要小得多,性能影响可以忽略不计。新的"v"属性跟踪负载版本。将来,没有"v"属性的有效载荷将被解释为预版本控制格式。
3。` dublincore`有效负载可能是dict
<-
添加测试来处理dublincore数据。可能需要一个额外的属性才能正确地表示有效负载,因此始终返回至少包含名称+内容的dict(可能还有"lang"或"scheme"是最好的方法。
使用"获取元数据"将返回字符串(或无):
**来自URL**
>tadatas('title')
>;>gt;打印页。获取元数据('title',strategy=['og',])
>;>gt;打印页。获取元数据('title',strategy=['page','og','dc',])
**来自html**
>;>html="<;here>;""
>;>page=metadata\parser.metadataparser(html=html)
>;>;打印页。元数据
>;>;打印页。获取元数据('title')
>;>;打印页。获取元数据('title',strategy=['og',])
>;>;打印页。获取元数据('title',strategy=['page','og','dc',])
医学数据
==========
查找格式错误的数据非常常见。从"0.9.20"版本起,应使用以下方法允许格式不正确的表示:
>;>;page=metadata parser.metadataparser(html=html,支持格式不正确的=true)
>;>;parsed=page.parse(html=html,支持格式不正确的=true)
>;。>;parsed=page.parse(html=html,support_malformed=false)
上述选项将支持分析常见的格式错误选项。目前,这只关注生成twitter标记的替代(不正确)方法,但可能会扩展到
>在python3上构建时,可能需要一个"静态"顶级目录