这个项目使用XML模板从网站中提取数据,几乎不需要代码

webparsa的Python项目详细描述


网页

这个项目使用XML模板从网站中提取数据,几乎不需要代码。在

XML模板用于模拟HTML本身的结构,允许您制作直观的选择器。 你可以直接复制和粘贴网站代码,并指定哪些属性是你想要的变量,它会 工作。在

存储单个值

注意:对于图像,请使用<p_img>标记,因为img标记在HTML中不能有子级。 要从元素的一部分提取某个值,请使用<value>标记。 值标签需要两件事:

  • 名称:要存储在其中的变量的名称
  • (内部文本):要存储的属性。在

存储值列表

要将类似div的列表导入为python列表,请用<list>标记封装标记的单个div。 列表标记只需要一个属性:

  • 名称:要存储在其中的变量的名称 不必是值的直接父级!在

存储值dict

要将一些值组合为dict,请将这些值包装在<dict>标记中。 需要一个name属性,如<list><value>。 不必是值的直接父级!在

可能的属性:

  • 在自我属性(any attribute):来自HTML标记的属性
  • 在自我.text:内部文本
  • 在自身元素:beauthulsoup元素

过滤

要选择带有HTML的元素,只需编写HTML元素。在

例如,编写<div class='foo'>将选择任何具有foo类的div。在

要过滤任何属性,请在元素中使用“filter.*”作为属性。在

  • 在索引=N过滤器:此元素必须位于select(element)[N]
  • 在过滤器.regex.*=正则表达式:此属性必须与某个正则表达式匹配。示例:过滤器.regex.text=.+, 过滤器.regex.attrs。数据=\d+。在
  • 在过滤器.功能=*:您为我们定义一个函数,在构造函数期间作为关键字参数传递。然后,我们传递一个包含属性('text'、'element'、'index'和另一个名为'attrs'的字典)的dict,如果应该拒绝节点,那么函数将返回False。在

后处理

在任何标记中,您都可以添加属性“after”以在任何<list>, <dict>, or <value>的值上运行。在

例如

<div id=number>
    <value name=number after=int>self.text</value>
</div>

将对从返回的值调用用户定义函数int自我.text. 这适用于XML树中的任何节点,包括HTML元素。 您也可以在<list><value>标记中调用这个after。在

注意:在列表中,此函数将在整个列表中调用,而不是在单个元素上调用!

若要定义“int”函数,请将其作为Parsa((structure),int=function)传入构造函数

可能有用的方法是使用一个名为df的函数,它从列表元素生成pandas数据帧。在

默认后处理函数:

  • (用户定义函数)
  • .<;…>;:运行类型(值)。<;…>;(值)。本质上是价值。<;…>;()。示例:“.strip”->;x.strip()
  • 内置函数,如int、float、str、list、dict等。模块内置的任何属性。在

其他后处理功能:

  • 删除逗号:x.replace(“,”,“”)
  • 拆分逗号:x.split(“,”)
  • 拆分:x.split(“”)

您可以通过在函数名之间添加“+”来使用函数组合。 例如: 删除逗号+int:“1000000”->;“1000000”->;1000000。在

如果您想使用多个参数,我建议您编写一个包装器函数或使用functools.partial生成一个partial。在

所需内容

默认情况下,所有选择器都必须存在才能存储数据点。 但是,如果希望数据点是可选的,请将选择器包装在<unrequired>中。在

示例

华盛顿-邮政编码.xml

希望这足以解释它是如何工作的! 这个得到W阿辛顿邮报头条新闻

{pr2}$

华盛顿-后py

{pr}$

许可证

麻省理工学院标准许可证。在

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

推荐PyPI第三方库


热门话题
java随机填充2d数组   java运行时。getRuntime。带有长参数的exec(cmd)   java Minecraft无法放置自定义背景   java AChartEngine YAxis自定义标签区域边距和图表值为字符串?   泛型类的java类型安全错误   整数的java符号等价物。toBinaryString方法?   Java中数组列表的数组   java WebView应用程序在谷歌登录后显示空白屏幕   java从backback中删除特定片段   如果服务器不支持使用的协议,java JSSE是否实现回退?   java Sonarqube正在进行核心漏洞查找。如何解决   javajavax。jcr。UnsupportedPositionOperationException:testVersionable处的节点不可版本化   java在安卓中每隔X小时运行一次文件/函数,无需打开应用程序   java如何为磁盘持久性配置BigMemory?   java BufferWriter不转换383以上的整数   Java7交集类型:规范具体说明了什么?   Java:CollectionHow创建多列   java如何检测运算符的空白   java问题:在firebase中为导航栏中的第二个表单提交数据第一个表单工作正常。实际isse是连接Mainactivity中的另一个活动