创建web内容提取器的框架

scrapple的Python项目详细描述


报废

加入聊天,网址:https://gitter.im/alexmathew/grapple在pypi上报废生成状态

报废是 基于键值创建web scraper和web crawler 配置文件。它提供了一个命令行接口来运行 给定的基于json的配置输入以及web上的脚本 提供必要输入的接口。

报废的主要目的是抽象web的设计过程。 内容提取程序。重点是要提取什么,而不是 怎么做。用户指定的配置文件包含选择器 表达式(xpath表达式或css选择器)和 挑选出来的。在没有 担心编写程序的用户。刮刀也可以用来 生成实现所需提取器的python脚本。

安装

您可以使用

$ sudo apt-get install libxml2-dev libxslt-dev python-dev lib32z1-dev
$ pip install scrapple

否则,您可以克隆此存储库并安装软件包。

$ git clone http://github.com/scrappleapp/scrapple scrapple
$ cd scrapple
$ pip install -r requirements.txt
$ python setup.py install

如何使用刮刀

cangable提供4个命令来创建和实现提取器。

在 用户指定的配置文件。关于如何 编写这些配置文件。

配置文件是提取器的基本规范 必修的。它包含要加载的网页的url, 要提取的数据的选择器表达式,如果是 爬网程序,用于爬网链接的选择器表达式。

配置文件中使用的密钥是:

  • 项目名称 :指定 已关联配置文件。
  • 选择器类型:指定使用的选择器表达式的类型。 这可以是"xpath"或"css"。
  • 刮削 :指定要创建的提取器的参数。
    • url :指定要加载的基本网页的url。
    • 数据 :指定数据的选择器列表 提取。
      • 选择器 :指定选择器表达式。
      • attr :指定要从 选择器表达式的结果。
      • 字段 :指定此数据所用的字段名 存储。
      • 默认值 :指定在 选择器表达式失败。
    • 表格 :指定删除表格数据的说明。
      • 表格类型 :指定表格的类型("行"或 "列")。这决定了要提取的表的类型。 行提取是指只有一行要提取 并映射到一组标题。列提取是指 必须提取一组行,给出标题值列表 映射。
      • 标题 :指定要用于表的标题。 这可以是一个标题列表,也可以是一个选择器, 标题列表。
      • 前缀 :指定要添加到每个报头的前缀。
      • 后缀 :指定要添加到每个标题的后缀。
      • 选择器 :指定数据的选择器。供行 提取,这是一个选择器,它将 提取。对于列提取,这是一个选择器列表 对于每一列。
      • attr :指定要从 选定标签。
      • 默认值 :指定在 选择器不返回任何数据。
    • 下一步 :指定爬网程序实现。
      • 跟随链接 :指定 <;a>; 要爬过的标记。

配置文件的主要目标是指定提取 根据选择器表达式和 提取。选择器/属性值对有一定的集合形式 执行各种类型的内容提取。

选择器表达式:

  • 指定标记为的css选择器或xpath表达式 已选定。
  • "url"获取提取所在的当前页的url 正在执行中。

属性选择器:

  • "文本"从标签中提取文本内容。
  • "ref"、"src"等,以提取 选定标签。

教程

[有关更详细的教程,请参阅 文档]

在这个使用brable的简单示例中,我们将提取nba player 信息来自ESPN网站

为了首先创建骨架配置文件,我们使用genconfig 命令。< /P>

$ scrapple genconfig nba http://espn.go.com/nba/teams --type=crawler --levels=2

这将为 crawler,它使用xpath表达式作为选择器。可以编辑 所需的跟随链接选择器、数据选择器和属性可以 指定。

{"project_name":"nba","selector_type":"xpath","scraping":{"url":"http://espn.go.com/nba/teams","data":[{"field":"","selector":"","attr":"","default":""}],"next":[{"follow_link":"//*[@class='mod-content']//a[3]","scraping":{"data":[{"field":"team","selector":"//h2","attr":"text","default":"<no_team>"}],"next":[{"follow_link":"//*[@class='mod-content']/table[1]//tr[@class!='colhead']//a","scraping":{"data":[{"field":"name","selector":"//h1","attr":"text","default":"<no_name>"},{"field":"headshot_link","selector":"//*[@class='main-headshot']/img","attr":"src","default":"<no_image>"},{"field":"number & position","selector":"//ul[@class='general-info']/li[1]","attr":"text","default":"<00> #<GFC>"}],"table":[{"table_type":"rows","header":"//div[@class='player-stats']//table//th","prefix":"season_","suffix":"","selector":"//div[@class='player-stats']//table//tr[1]/td","attr":"text","default":""},{"table_type":"rows","header":"//div[@class='player-stats']//table//th","prefix":"career_","suffix":"","selector":"//div[@class='player-stats']//table//tr[@class='career']/td","attr":"text","default":""}]}}]}}]}}

可以使用run命令运行提取器-

$ scrapple run nba nba_players -o json

这将创建包含提取数据的nba_players.json。安 此数据的示例片段:

{"project":"nba","data":[#nba_players.jsoncontinues{"career_APG":"9.9","career_PER":"","career_PPG":"18.6","career_RPG":"4.4","headshot_link":"http://a.espncdn.com/combiner/i?img=/i/headshots/nba/players/full/2779.png&w=350&h=254","name":"Chris Paul","number & position":"#3 PG","season_APG":"9.2","season_PER":"23.49","season_PPG":"17.6","season_RPG":"3.5","team":"Los Angeles Clippers"},{"career_APG":"3.6","career_PER":"","career_PPG":"20.3","career_RPG":"5.8","headshot_link":"http://a.espncdn.com/combiner/i?img=/i/headshots/nba/players/full/662.png&w=350&h=254","name":"Paul Pierce","number & position":"#34 SF","season_APG":"0.9","season_PER":"7.55","season_PPG":"5.0","season_RPG":"2.6","team":"Los Angeles Clippers"},{"career_APG":"2.9","career_PER":"","career_PPG":"3.7","career_RPG":"1.8","headshot_link":"http://a.espncdn.com/combiner/i?img=/i/headshots/nba/players/full/4182.png&w=350&h=254","name":"Pablo Prigioni","number & position":"#9 PG","season_APG":"1.9","season_PER":"8.72","season_PPG":"2.3","season_RPG":"1.5","team":"Los Angeles Clippers"},{"career_APG":"2.0","career_PER":"","career_PPG":"11.1","career_RPG":"1.9","headshot_link":"http://a.espncdn.com/combiner/i?img=/i/headshots/nba/players/full/3024.png&w=350&h=254","name":"J.J. Redick","number & position":"#4 SG","season_APG":"1.6","season_PER":"18.10","season_PPG":"15.9","season_RPG":"1.5","team":"Los Angeles Clippers"},#nba_players.jsoncontinues]}

run命令还可以用于创建一个csv文件,其中 数据,使用–output_type=csv参数。

generate命令可用于生成一个python脚本 实现这个提取器。实际上,它复制了 运行命令。

$ scrapple generate nba nba_script -o json

这将创建nba_script.py,它提取所需的数据并存储 json文档中的数据。

文档

您可以阅读完整的文档 对于广泛的背景报道,一个彻底的 关于报废包装实施的说明 关于如何使用刮板来运行刮板/履带的教程 乔布斯.

作者

报废由alex math维护电子战< > 以及哈里什·巴拉克里希南

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

推荐PyPI第三方库


热门话题
java有可能让Glassfish JAAS领域与一个已安装的应用程序共享一些类吗?   卸载weblogic时发生java log4j错误   java如何读取信息并将这些信息放入对象数组中   java线程池执行器。创建新线程时执行(Runnable命令)   java无法将project facet动态Web模块的版本更改为2.5   未添加到ArrayList Java Android的元素   javajavax。xml。绑定UnmarshaleException:意外元素(uri:,local:“ProcessCreditApplication”)。预期的元素是   java如何通过youtube API获取已删除视频的列表   如何在JavaBean验证中停止级联   java为什么我的ListView使我的应用程序崩溃,而不是列出我的条目?   java Guice多数据库自动切换   java(JDA)Mute命令在代码的第四行中断   推荐一种可通过Java中的随机访问进行更新的索引文件格式   java将arrayList添加到2x2 arrayList   java json对象数据发生变化,有时没有值   java使用Jedis库在redis中一次存储字符串列表   java快速排序分区   java setDaemon(false)是冗余的吗?   Java中的itext格式pdf