创建web内容提取器的框架
scrapple的Python项目详细描述
报废
报废是 基于键值创建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维护电子战< > 以及哈里什·巴拉克里希南