文章目录
一.如何创建Scrapy爬虫项目
(1) Win+R 打开cmd,假如我要在F盘的Scrapy文件中创建项目,进入相应的地方,如下。(cd,是进入下一级,cd..是返回上一级,cd\是返回盘符)(2)使用指令 scrapy startproject dangdang 创建名为dangdang的项目。
(3) 点击核心目录,又发现了有很多文件,如下。
spiders文件夹放置我们的爬虫,可以使用 scrapy genspider -t basic 文件名 域名 创建爬虫文件,其中basic可以换,因为它是一个模版,还可换成:
Available templates: #模板说明 basic 创建基础爬虫文件 crawl 创建自动爬虫文件 csvfeed 创建爬取csv数据爬虫文件 xmlfeed 创建爬取xml数据爬虫文件
Spider要做两件事:(1)定义爬取网站的动作 (2)分析爬取下来的网页 _ init_.py:爬虫项目的初始化文件,用来对项目做初始化工作。 items.py:爬虫项目的数据容器文件,用来定义要获取的数据。 middlewares.py:爬虫项目的中间件文件。 pipelines.py:爬虫项目的管道文件,用来对items中的数据进行进一步的加工处理。 settings.py:爬虫项目的设置文件,包含了爬虫项目的设置信息。
注:不在scrapy项目下的爬虫文件用 scrapy runspider + 文件名.py来运行
二.Scrapy的一些指令说明
(1)输入 scrapy -l ,可以查看 全局指令bench 测试电脑当前爬取速度性能 fetch 将网页内容下载下来,然后在终端打印当前返回的内容 genspider 创建spiders文件夹下的.py爬虫文件 runspider 通过runspider命令可以不依托scrapy的爬虫项目,直接运行一个爬虫文件 settings 使用settings命令查看的使用对应的项目配置信息 shell 通过shell命令可以启动Scrapy的交互终端 startproject 创建爬虫项目 version 输出Scrapy版本 scrapy version [-v], 后面加 -v 可以显示scrapy依赖库的版本 view 用于下载某个网页,然后通过浏览器查看
(2)进入创建的爬虫项目,再输入
scrapy -l,可以查看
全局指令与项目指令
(3) scrapy genspider -l 查看scrapy创建爬虫文件可用的模板
(1)使用cmd命令行创建好项目及spiders文件夹下的爬虫文件后,用编辑器打开。
(2)找到item.py文件,定义要获取的数据容器。
(3) scrapy genspider -l 查看scrapy创建爬虫文件可用的模板
三.当当网商品爬取实战
目标:爬取当当网连衣裙第一页商品的名称、链接、评论数;并写入数据库。(1)使用cmd命令行创建好项目及spiders文件夹下的爬虫文件后,用编辑器打开。
(2)找到item.py文件,定义要获取的数据容器。
# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://doc.scrapy.org/en/latest/topics/items.html import scrapy #items.py:爬虫项目的数据容器文件,用来定义要获取的数据。 #爬取当当网连衣裙商品的名字、链接、评论数 class DangdangItem(scrapy.Item): # define the fields for your item here like: title = scrapy.Field() link = scrapy.Field() comment = scrapy.Field()
(3)找到自定义的爬虫文件dd.py。
# -*- coding: utf-8 -*- import scrapy from dangdang.items import * from scrapy.http import Request class DdSpider(scrapy.Spider): # 一般和爬虫文件名一样 name = 'dd' # 允许爬取域名为'dangdang.com'的网址 allowed_domains = ['dangdang.com'] # 第一次爬取的网址 start_urls = ['http://category.dangdang.com/cid4008149.html'] # response是爬取网页信息后返回的信息 def parse(self, response): item = DangdangItem() # item可理解为一个字典,下面为每个key的value赋值都为一个列表 # response.xpath('//a[@name="itemlist-title"]/@title').extract()返回的是一个列表 item["title"] = response.xpath('//a[@name="itemlist-title"]/@title').extract() item["link"] = response.xpath('//a[@name="itemlist-title"]/@href').extract() item["comment"] = response.xpath('//a[@name="itemlist-review"]/text()').extract() yield item #上面爬取第一页的信息,那么怎么爬取后面几页的信息呢? #构造请求要用到scrapy.Request(url, callback) # url:请求链接 # callback :回调函数,当请求完成后,获取到响应, #引擎会将该响应作为参数传递给这个回调函数。回调函数进行解析或者生成下一个请求,回调函数如下面的parse。 for i in range(2, 4): url = 'http://category.dangdang.com/pg' + str(i) + '-cid4008149.html' yield Request(url, callback=self.parse)
运行结果:
(部分)