Scrapy入门、当当网商品爬取实战
文章目录
- 一.介绍Scrapy爬虫项目的创建流程
- 二.对Scrapy常用指令的操作指南
- 三.针对当当网的商品数据抓取实战演练
一.如何创建Scrapy爬虫项目
通过组合键Win+R调用cmd,在F盘的Scrapy文件中创建项目时,请先将光标定位至目标路径位置并执行以下操作: navigated to the Scrapy project folder. 在其中,请使用cd命令切换目录: cd command用于进入当前目录; cd...指令则可返回父目录;而使用cd\则会回到根目录位置。

运行命令scrapy startproject dangdang来启动名为‘DANGDANG’的新 scrapy 项目。在 scrapy 路径中,默认会生成一个以相同名称命名的核心目录以及项目的配置文件 scrapy.cfg。

(3) 点击核心目录,又发现了有很多文件,如下。

放置在spiders文件夹中的我们的爬虫可以通过以下命令生成一个具体的爬虫文件:scrapy genspider -t basic 文件名 域名其中basic是可以更换的模版名称因为这是一个模版还可以更换为其他模板名称:
Available templates: #模板说明
basic 创建基础爬虫文件
crawl 创建自动爬虫文件
csvfeed 创建爬取csv数据爬虫文件
xmlfeed 创建爬取xml数据爬虫文件
AI写代码
哪个里面写什么,这和Scrapy架构有关系
Spider要做两件事:(1)定义爬取网站的动作 (2)分析爬取下来的网页
_ init_.py:爬虫项目的初始化文件,用来对项目做初始化工作。
items.py:爬虫项目的数据容器文件,用来定义要获取的数据。
middlewares.py:爬虫项目的中间件文件。
pipelines.py:爬虫项目的管道文件,用来对items中的数据进行进一步的加工处理。
settings.py:爬虫项目的设置文件,包含了爬虫项目的设置信息。
AI写代码
执行位于scrapy项目中的爬虫脚本的命令为scrapy crawl dd
二.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 用于下载某个网页,然后通过浏览器查看
AI写代码
(2)进入生成的爬虫项目后再运行scrapy -l命令即可了解全局操作与特定项目的指令设置
如craw…
(3)使用scrapy genspider脚本运行-l参数后能够获取创建爬虫文件所允许使用的模板
三.当当网商品爬取实战
在cmd命令行工具中建立项目的结构,并将所需爬虫代码放置于spiders子目录内。随后,在cmd命令行界面下执行相应的启动指令以运行爬虫程序。接着,在该环境中通过编辑器程序打开并导航至目标数据处理模块(如item.py)。在此过程中,请注意定位至item.py文件位置,并为获取的数据信息类型创建变量空间以存储采集到的商品名称、URL地址以及对应的评论数量信息。
# -*- 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()
AI写代码
(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)
AI写代码
在命令行终端中执行 scrapy crawl dd --nolog 这个命令将会启动爬虫脚本,并同样可以启动整个爬虫项目。

