scrapy库提供了genspider 命令用于创建一个 spider 脚本,其语法格式如下:
scrapy genspider [template] <name> <domain>
(1)template:表示创建模板的类型,缺省则使用默认模板。
(2)name:表示创建的 spider 脚本名称,创建后会在 spiders 目录下生成一个以 name命名的.py文件。
(3)domain:表示要爬取网站的域名。
在BaiduSpider 项目中创建一个爬取百度首页热榜新闻的spider 脚本,命名为news,域名为www.baidu.com,其过程为:输入“cd BaiduSpider”命令并运行,切换到“BaiduSpider目录下:然后输入“scrapy genspider news www.baidu.com”命令并运行,创建一个 spider脚本,如图8-4所示。
创建spider 脚本后,在 spiders 目录下生成了一个名为“news.py”的文件,其模板见图8-4。在该文件中定义了一个NewsSpider 类,其中包含三个属性和一个方法,它们的说明如下:
(1)name:在同一个项目中,名字是唯一的,用来区分不同的 spider。
(2)allowed domains:允许爬取的域名,如果初始或后续请求的URL不是这个域名下的,则请求会被过滤掉,可以根据需要编辑或添加。
(3)start urls: spider 初始爬取的 URL列表,可以根据需要编辑或添加。
(4)parse(self,response): 解析返回的响应,提取数据或新的 URL,response 是请求start urs后返回的响应。
由于 scrapy 库支持 CSS 选择器、XPath 选择器和正则表达式,所以解析响应时可以调用xpath()、css()等方法提取数据。调用方法后返回的数据是 SelectorList 类型,并不是真正的文本内容。此时,可以使用 extract()方法(返回列表)或 extract first()方法(返回列表的第一个元素来提取所需数据。