从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上构建时,可能需要一个"静态"顶级目录

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JTable无法向新创建的列添加值   java如何调整JEditorPane中编辑区域的大小?   Java通过反射确定未知数组中的数组大小   java Intellij Idea有时无法按其预期的方式构建应用程序   java Swing GUI带有IntelliJ错误“contentPane不能设置为null”从终端编译时   如何将这些通用方法调用从C#转换为Java   在null上找不到java属性或字段“index”   从Java HashMap获取整数值时是否需要调用intValue()方法?   java Android谷歌地图获取相机中的图像块   unix无法捕获JAVA中“who m”命令的输出   java,同时将邮件发送到“收件人”标题“我”中的多个收件人   在java中向链表添加未知数量的节点   无法为Heroku上的discord bot设置java端口   java使用Apache HttpClient进行选项请求   与元素类型“ApplicationName”关联的属性“Application Version”需要java Open quote   Android Studio Java中的两个变量求和