diff --git a/docs/5.md b/docs/5.md index 432a6d6781bfc6abf3cd438b7b31e8296c934d2f..2de7eb1eb0ef676e5975cd4bc0cda23718701971 100644 --- a/docs/5.md +++ b/docs/5.md @@ -4,7 +4,7 @@ 在本教程中,我们假定scrapy已经安装在您的系统上。如果还未安装,看 [安装指南](install.html#intro-install) . -我们将回爬 [quotes.toscrape.com](http://quotes.toscrape.com/)的网站, 这是一家列出著名作家的名言的网站。 +我们将会爬 [quotes.toscrape.com](http://quotes.toscrape.com/)的网站, 这是一家列出著名作家的名言的网站。 本教程将指导您完成以下任务: @@ -128,7 +128,7 @@ scrapy crawl quotes 如果您想知道为什么我们还没有解析HTML,请稍等,我们很快就会讨论这个问题。 -#### 引擎盖下面发生了什么? +#### 实际上发生了什么事? Scrapy 安排被 Spider 里 `start_requests` 方法所返回的对象,也就是 [`scrapy.Request`](../topics/request-response.html#scrapy.http.Request "scrapy.http.Request") 。在接收到每个响应时,它实例化 [`Response`](../topics/request-response.html#scrapy.http.Response "scrapy.http.Response") 对象并调用与请求关联的回调方法(在本例中,为 `parse` 方法)将响应作为参数传递。 @@ -205,7 +205,7 @@ scrapy shell "http://quotes.toscrape.com/page/1/" ``` -运行 `response.css('title')` 的输出结果是个列表形似的对象,即为 [`SelectorList`](../topics/selectors.html#scrapy.selector.SelectorList "scrapy.selector.SelectorList") 。这包含一组封装了XML/HTML元素的 [`Selector`](../topics/selectors.html#scrapy.selector.Selector "scrapy.selector.Selector") 对象,并允许您进行进一步的查询,以细化所选内容或提取数据。 +运行 `response.css('title')` 的输出结果是一个列表形式的对象,即为 [`SelectorList`](../topics/selectors.html#scrapy.selector.SelectorList "scrapy.selector.SelectorList") 。这包含一组封装了XML/HTML元素的 [`Selector`](../topics/selectors.html#scrapy.selector.Selector "scrapy.selector.Selector") 对象,并允许您进行进一步的查询,以细化所选内容或提取数据。 要从以上标题中提取文本,可以执行以下操作: @@ -261,7 +261,7 @@ scrapy shell "http://quotes.toscrape.com/page/1/" #### xpath:简介 -此外 [CSS](https://www.w3.org/TR/selectors) ,scrapy选择器也支持使用 [XPath](https://www.w3.org/TR/xpath) 表达:: +除了 [CSS](https://www.w3.org/TR/selectors) ,scrapy选择器也支持使用 [XPath](https://www.w3.org/TR/xpath) 表达式: ```py >>> response.xpath('//title') @@ -271,17 +271,17 @@ scrapy shell "http://quotes.toscrape.com/page/1/" ``` -XPath表达式是非常强大的,是抓取选择器的基础。实际上,CSS选择器在引擎盖下转换为xpath。如果仔细阅读shell中选择器对象的文本表示形式,可以看到这一点。 +XPath表达式是非常强大的,也是抓取选择器的基础。实际上,CSS选择器其实是转换为XPath。Shell中的选择器对象所输出的文字也可以发现这一点。 -虽然可能不像CSS选择器那么流行,但xpath表达式提供了更多的功能,因为除了导航结构之外,它还可以查看内容。使用xpath,您可以选择如下内容:[*](#id1)选择包含文本“下一页”[*](#id3)的链接。这使得xpath非常适合于抓取任务,并且我们鼓励您学习xpath,即使您已经知道如何构造css选择器,它也会使抓取更加容易。 +虽然也许不如CSS选择器那么流行,但XPath表达式提供了更多的功能,因为除了导航结构之外,它还可以查看内容。使用XPath,您可以选择如下内容:[*](#id1)选择包含文本“下一页”[*](#id3)的链接。这使得xpath非常适合于抓取任务,并且我们鼓励您学习XPath,即使您已经知道如何构造css选择器,它也会使抓取更加容易。 -这里我们不介绍太多的xpath,但是您可以阅读更多关于 [using XPath with Scrapy Selectors here](../topics/selectors.html#topics-selectors) . 要了解有关xpath的更多信息,我们建议 [this tutorial to learn XPath through examples](http://zvon.org/comp/r/tut-XPath_1.html) 和 [this tutorial to learn "how to think in XPath"](http://plasmasturm.org/log/xpath101/) . +这里我们不介绍太多的XPath,但是您可以阅读更多关于 [以Scrapy选择器使用XPath](./10.md) . 要了解有关xpath的更多信息,我们建议 [this tutorial to learn XPath through examples](http://zvon.org/comp/r/tut-XPath_1.html) 和 [this tutorial to learn "how to think in XPath"](http://plasmasturm.org/log/xpath101/) . -#### 提取引用和作者 +#### 提取名言(quote)和作者 -既然您对选择和提取有了一些了解,那么让我们通过编写代码从网页中提取引号来完成 Spider 程序。 +既然您对选择和提取有了一些了解,那么让我们通过编写代码从网页中提取名言来完成 Spider 程序。 -[http://quotes.toscrape](http://quotes.toscrape).com中的每个引号都由如下所示的HTML元素表示: +[http://quotes.toscrape.com](http://quotes.toscrape.com)中的每个引号都由如下所示的HTML元素表示: ```py
@@ -302,28 +302,28 @@ XPath表达式是非常强大的,是抓取选择器的基础。实际上,CSS ``` -让我们打开Scrapy Shell并播放一点以了解如何提取所需数据: +让我们打开Scrapy Shell并了解如何提取所需数据: ```py $ scrapy shell 'http://quotes.toscrape.com' ``` -我们得到了引号HTML元素的选择器列表,其中: +我们得到了quote的HTML元素的选择器列表: ```py >>> response.css("div.quote") ``` -上面的查询返回的每个选择器都允许我们对其子元素运行进一步的查询。让我们将第一个选择器赋给一个变量,这样我们就可以直接在一个特定的引号上运行css选择器: +以上的查询返回的每个选择器都允许我们对其子元素运行进一步的查询。让我们将第一个选择器赋给一个变量,这样我们就可以直接在一个特定的quote上运行css选择器: ```py >>> quote = response.css("div.quote")[0] ``` -现在,让我们提取 `title` , `author` 以及 `tags` 从引用中使用 `quote` 我们刚刚创建的对象: +现在,让我们用刚刚创建的对象从使用 `quote` 的名言中提取 `text` , `author` 以及 `tags` : ```py >>> title = quote.css("span.text::text").get() @@ -335,7 +335,7 @@ $ scrapy shell 'http://quotes.toscrape.com' ``` -鉴于标记是字符串列表,我们可以使用 `.getall()` 获取全部内容的方法: +鉴于标签是字符串列表,我们可以使用 `.getall()` 方法获取全部内容: ```py >>> tags = quote.css("div.tags a.tag::text").getall() @@ -344,7 +344,7 @@ $ scrapy shell 'http://quotes.toscrape.com' ``` -了解了如何提取每一位之后,我们现在可以迭代所有引号元素,并将它们放在一个python字典中: +了解了如何提取每一位之后,我们现在可以迭代所有quote元素,并将它们放在一个Python字典中: ```py >>> for quote in response.css("div.quote"): @@ -361,9 +361,9 @@ $ scrapy shell 'http://quotes.toscrape.com' ### 在 Spider 中提取数据 -让我们回到 Spider 身边。到目前为止,它还没有提取任何数据,特别是将整个HTML页面保存到一个本地文件中。让我们把上面的提取逻辑集成到 Spider 中。 +让我们回到 Spider 。到目前为止,它还没有提取任何数据,它只是将整个HTML页面保存到一个本地文件中。让我们把上面的提取逻辑集成到 Spider 中。 -剪贴 Spider 通常会生成许多字典,其中包含从页面中提取的数据。为此,我们使用 `yield` 回调中的python关键字,如下所示: +Scrapy Spider 通常会生成许多字典,其中包含从页面中提取的数据。为此,我们使用 `yield` 回调python关键字,如下所示: ```py import scrapy @@ -385,7 +385,7 @@ class QuotesSpider(scrapy.Spider): ``` -如果运行这个spider,它将用日志输出提取的数据: +如果运行这个spider,它将会输出提取的数据在日志中: ```py 2016-09-19 18:57:19 [scrapy.core.scraper] DEBUG: Scraped from <200 http://quotes.toscrape.com/page/1/>