经过一天多时间在wiki上将scrapy官方的翻译版快速读了一遍,对scrapy有了一个大概的了解和熟悉。下面做一个快速总结:
1.创建项目:
scrapy startproject tutorial
cd tutorial #进入刚刚创建的文件夹内
scrapy genspider 文件名 网站网址 #创建完成
2.编写Item
Item 是保存爬取到的数据的容器;其使用方法和 python 字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。如果item里未定义,spider所爬的数据是无法从传入进去的。
3.编写爬虫
Spider 是用户编写用于从单个网站(或者一些网站)爬取数据的类。其包含了一个用于下载的初始 URL,如何跟进网页中的链接以及如何分析页面中的内容, 提取生成item的方法。为了创建一个 Spider,您必须继承scrapy.Spider类, 且定义以下三个属性:
name: 用于区别 Spider。 该名字必须是唯一的,您不可以为不同的 Spider 设定相同的名字。
start_urls: 包含了 Spider 在启动时进行爬取的 url 列表。 因此,第一个被获取到的页面将是其中之一。 后续的 URL 则从初始的 URL 获取到的数据中提取。
parse()是 spider 的一个方法。 被调用时,每个初始 URL 完成下载后生成的Response对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成 item)以及生成需要进一步处理的 URL 的 `Request 对象。
(1)如上图所示,首先将整个节点给选择出来(response.xpath('//ul/li')并对整个节点进行循环,然后再对其内各个要素进行选取。
(2)爬取多页:将某一页的要选取的要素提取出来,确定选取的内容。然后在找出URL的规律将URL传入parse函数(如箭头所示)
4.运行爬虫
scrapy crawl 文件名
5.运行流程
Spider 类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取 item)。换句话说,Spider 就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。
对 spider 来说,爬取的循环类似下文:
以初始的 URL 初始化 Request,并设置回调函数。当该 request 下载完毕并返回时,将生成 response,并作为参数传给该回调函数。
spider 中初始的 request 是通过调用start_requests()来获取的。start_requests()读取start_urls 中的 URL, 并以parse为回调函数生成Request。
在回调函数内分析返回的(网页)内容,返回 Item 对象或者 Request 或者一个包括二者的可迭代容器。 返回的 Request 对象之后会经过 Scrapy 处理,下载相应的内容,并调用设置的 callback 函数(函数可相同)。
在回调函数内,您可以使用 选择器(Selectors) (您也可以使用 BeautifulSoup, lxml 或者您想用的任何解析器) 来分析网页内容,并根据分析的数据生成 item。
最后,由 spider 返回的 item 将被存到数据库(由某些 Item Pipeline 处理)或使用 Feed exports 存入到文件中。