一、提取链接
任务需求:如果爬取的数据通常分布在多个页面中,每个页面包含一部分数据以及到其他页面的链接,提取链接可以使用Selector和使用LinkExtractor两个方法。
在页面中待提取的链接较少的时候,可以使用Selector来进行解决,但是其毕竟主要的作用还是提取数据,不是专门用于提取链接的,故这里使用LinkExtractor用于专门对大量链接和较为复杂场景的链接提取。可以设定不想要/想要的链接开头,设定提取的css范围和XPath列表以及不想要的链接域等都可以通过LinkExtractor获取到。
二、导出数据
这个解决任务的需求在于对爬取到的数据以某种数据格式保存到文件中,即导出数据。
在Scrapy中负责导出数据的组件被成为Exporter,在Scrapy中有多种Exporter,每种Exporter支持一种数据格式的导出,其可支持的数据格式为:JSON/JSON lines/CSV/XML/Pickle/Marshal。除去这6种文本格式外的格式,均需要自定义Exporter来实现。
导出数据时,Scrapy需提供导出文件的路径、导出文件的数据格式;可以通过命令行参数和修改配置文件实现导出数据。
①使用命令行参数导出(-o/-t)数据:
eg1:scrapy crawl books -o books.csv
eg2:scrapy crawl books-t csv -o books.data
②配置文件(settings.py)导出数据:
在默认配置文件中,使用的是FEED_EXPORTERS_BASE,这个使用的是内部支持的导出格式。
在用户配置文件中,使用的是FEED_EXPORTERS,这个是用户自定义的导出格式。
以下是在配置文件中需要设置的参数值:
FEED_URI:”export_data/%(name)s/%(time)s.data”//文件输出路径
FEED_FORMAT:”json”//文件输出格式
FEED_EXPORT_ENCODING:”utf-8”//文件编码格式
FEED_EXPORT_FIELDS:[‘name’,’author’,’price’,”type”,’’country”]//导出数据包含的字段
FEED_EXPORTERS:{“xlsx”:”myproject.myexporters.XLSXItemExporter”}//这个在自定义了一个XLSXItemExporter时进行这样使用。
以下是对如何进行自定义导出格式的实现阐述:
由于Scrapy中有一个BaseItemExporter导出基类,故在进行自定义导出类XLSXItemExporter实现中,需要继承该基类。然后自定义该类中的方法,最终实现对xlsx格式的导出。