当 Item 在 Spider 中被收集之后,它将会被传递到 Item Pipeline,一些组件会按照一定的顺序执行对 Item 的处理。每个 item pipeline 组件(有时称之为“Item Pipeline”)是实现了简单方法的 Python 类。他们接收到 Item 并通过它执行一些行为,同时也决定此 Item 是否继续通过 pipeline,或是被丢弃而不再进行处理。
Scrapy 终端是一个交互终端,供您在未启动 spider 的情况下尝试及调试您的爬取代码。 其本意是用来测试提取数据的代码,不过您可以将其作为正常的 Python 终端,在上面测试任何的 Python 代码。该终端是用来测试 XPath 或 CSS 表达式,查看他们的工作方式及从爬取的网页中提取的数据。
Item Loaders 提供了一种便捷的方式填充抓取到的:Items。虽然 Items 可以使用自带的类字典形式 API 填充,但是 Items Loaders 提供了更便捷的 API,可以分析原始数据并对 Item 进行赋值。从另一方面来说,Items 提供保存抓取数据的容器,而 Item Loaders 提供的是 填充 容器的机制。
当抓取网页时,你做的最常见的任务是从 HTML 源码中提取数据。现有的一些库可以达到这个目的:BeautifulSoup 是在程序员间非常流行的网页分析库,它基于 HTML 代码的结构来构造一个 Python 对象, 对不良标记的处理也非常合理,但它有一个缺点:慢。lxml 是一个基于 ElementTree(不是 Python 标准库的一部分)的 python 化的 XML 解析库(也可以解析 HTML)。
Spider 类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取 item)。换句话说,Spider 就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。对 spider 来说,爬取的循环类似下文:以初始的 URL 初始化 Request,并设置回调函数。
爬取的主要目标就是从非结构性的数据源提取结构性数据,例如网页。Scrapy 提供 Item 类来满足这样的需求。Item 对象是种简单的容器,保存了爬取到得数据。其提供了类似于词典(dictionary-like)的API以及用于声明可用字段的简单语法。声明 ItemItem 使用简单的 class 定义语法以及 Field 对象来声明。例如:import scrapyclass Product(scrapy.Item): name = scrapy.
新版功能。Scrapy 是通过 scrapy 命令行工具进行控制的。 这里我们称之为 “Scrapy tool” 以用来和子命令进行区分。对于子命令,我们称为 “command” 或者 “Scrapy commands”。Scrapy tool 针对不同的目的提供了多个命令,每个命令支持不同的参数和选项。默认的 Scrapy 项目结构在开始对命令行工具以及子命令的探索前,让我们首先了解一下 Scrapy 的项目的目录结构。
学习的最好方法就是参考例子,Scrapy 也不例外。Scrapy 提供了一个叫做 dirbot 的样例项目供您把玩学习。其包含了在教程中介绍的 dmoz spider。您可以通过 [https://github.com/scrapy/dirbot]( https://github.com/scrapy/dirbot ) 找到 dirbot。其包含了 README 文件,详细介绍了项目的内容。如果您熟悉 git,您可以 checkout 代码。
在本篇教程中,我们假定您已经安装好 Scrapy。 如若不然,请参考安装指南 。接下来以 Open Directory Project(dmoz) (dmoz) 为例来讲述爬取。本篇教程中将带您完成下列任务:创建一个 Scrapy 项目定义提取的 Item编写爬取网站的 spider 并提取 Item编写 Item Pipeline 来存储提取到的 Item(即数据)Scrapy 由 Python 编写。
安装 Scrapy注解请先阅读平台安装指南。下列的安装步骤假定您已经安装好下列程序:Python2.7PythonPackage:pipandsetuptools。现在 pip 依赖 setuptools,如果未安装,则会自动安装setuptools。lxml。大多数 Linux 发行版自带了 lxml。如果缺失,请查看 http://lxml.de/installation.htmlOpenSSL。除了 Windows(请查看平台安装指南)之外的系统都已经提供。
Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说,网络抓取)所设计的, 也可以应用在获取 API 所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。
Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。本指南是 Scrapy 目前最新的版本,内容涉及安装,使用,开发,API 调试等全部知识点,帮助读者学习使用 Scrapy 框架开发网络爬虫。适用人群本指南适用于网络爬虫初学者学习,能够通过本指南了解到爬虫框架的原理和实现过程。
你已经学到,在 Hibernate 中,一个对象将被创建和保持。一旦对象已经被修改,它必须被保存到数据库里。这个过程持续直到下一次对象被需要,它将被从持久的存储中加载。 因此一个对象通过它生命周期中的不同阶段,并且 Interceptor 接口提供了在不同阶段能被调用来进行一些所需要的任务的方法。
考虑一种情况,你需要使用 Hibernate 将大量的数据上传到你的数据库中。以下是使用 Hibernate 来达到这个的代码片段: Session session = SessionFactory.openSession();Transaction tx = session.beginTransaction();for ( int i=0; i<100000; i++ ) { Employee employee = new Employee(.....); session.save(employee);}tx.commit();session.close();
缓存是关于应用程序性能的优化,降低了应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。 缓存对 Hibernate 来说也是重要的,它使用了如下解释的多级缓存方案: 一级缓存第一级缓存是 Session 缓存并且是一种强制性的缓存,所有的要求都必须通过它。Session 对象在它自己的权利之下,在将它提交给数据库之前保存一个对象。
如果你想使用数据库特定的功能如查询提示或 Oracle 中的 CONNECT 关键字的话,你可以使用原生 SQL 数据库来表达查询。Hibernate 3.x 允许您为所有的创建,更新,删除,和加载操作指定手写 SQL ,包括存储过程。
Hibernate 提供了操纵对象和相应的 RDBMS 表中可用的数据的替代方法。一种方法是标准的 API,它允许你建立一个标准的可编程查询对象来应用过滤规则和逻辑条件。 Hibernate Session 接口提供了 createCriteria() 方法,可用于创建一个 Criteria 对象,使当您的应用程序执行一个标准查询时返回一个持久化对象的类的实例。
Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。 HQL 查询被 Hibernate 翻译为传统的 SQL 查询从而对数据库进行操作。尽管你能直接使用本地 SQL 语句,但我还是建议你尽可能的使用 HQL 语句,以避免数据库关于可移植性的麻烦,并且体现了 Hibernate 的 SQL 生成和缓存策略。
到现在为止,你已经看到 Hibernate 如何使用 XML 映射文件来完成从 POJO 到数据库表的数据转换的,反之亦然。Hibernate 注释是无需使用 XML 文件来定义映射的最新方法。你可以额外使用注释或直接代替 XML 映射元数据。Hibernate 注释是一种强大的来给对象和关系映射表提供元数据的方法。
目前为止我们已经通过应用 Hibernate 见识过十分基础的 O/R 映射了,但是还有三个更加重要的有关映射的话题需要我们更详细的探讨。这三个话题是集合的映射,实体类之间的关联映射以及组件映射。 集合映射如果一个实例或者类中有特定变量的值的集合,那么我们可以应用 Java 中的任何的可用的接口来映射这些值。Hibernate 可以保存 java.util.Map, java.util.Set, java.util.
关注时代Java