网络爬虫---用scrapy框架爬取当当网商品信息实战将信息写入数据库(主要是对scrapy框架的熟悉和初步使用)

用scrapy框架爬取当当网商品信息实战

1.用scrapy框架创建项目

(1)打开cmd,你想到到哪里创建scrapy爬虫项目,就用cd指令,进入到相应的路径。
(2)输入:scrapy startproject dangdang,后面的dangdang是项目名,这样你就建立了一个scrapy爬虫项目。

2.scrapy项目文件简介

进入到你所创建的scrapy爬虫项目,里面有如下几个文件:

  • spiders文件夹用来存放爬虫文件,里面的__init__.py文件为初始化文件。
  • __init__.py为初始化文件
  • items.py用来放爬取的目标,对象
  • middlewares.py是一个中间件文件,比如存放IP代理和用户代理
  • pipelines.py主要是爬取信息后的处理,比如数据是打印处理,还是存放在文件中等等

注意:Scrapy 默认会过滤重复的 URL,不会重复抓取相同的 URL,除非显式指定。

3.在scrapy框架下的爬虫文件

(1)scrapy genspider -l用来查看爬虫文件有哪些文件模板
在这里插入图片描述

  • basic模板是基础模板,
  • crawl模板主要是做自动爬虫,
  • csvfeed是爬取csv格式的爬虫文件
  • xmlfeed是爬取xml格式的爬虫文件

(2)建立爬虫文件:
scrapy genspider -t basic dd baidu.com
说明:basic是基础模型的爬虫文件,dd是爬虫文件名,baidu.com是允许爬取的域名。
(3)运行scrapy项目下的爬虫文件
scrapy crawl dd
注意:不在scrapy项目下的爬虫文件用scrapy runspider +文件名来运行

4.用scrapy框架爬取当当网商品信息实战

(1)先用命令行创建scrapy项目和一个爬虫文件。
创建scrapy项目:scrapy startproject <project_name>
创建爬虫文件:scrapy genspider [-t template] <name> <domain>
在这里插入图片描述
(2)在pycharm中点击File,再点击open导入该scrapy项目,可以在左边看见项目。
在这里插入图片描述
(3)点击items.py编辑文件:
创建容器,顾名思义就是要创建一个来存放爬取的数据东西,也就是创建Item。
这里我们要获取什么信息就设置什么变量,即设置什么容器。这里,我们要获取标题、对应链接和评论数,所有定义三个变量:

# -*- 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


class DangdangItem(scrapy.Item):
    # define the fields for your item here like:
    title = scrapy.Field()
    link = scrapy.Field()
    comment = scrapy.Field()

(2)点击dd.py,编辑,要注意item["title"]不是item.title,它是一个键值对

# -*- 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是一个字典dict,下面为每个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
        #接着爬取第一页之后的页面信息
        for i in range(2, 4):
            url = 'http://category.dangdang.com/pg' + str(i+1) + '-cid4008149.html'
            yield Request(url, callback=self.parse)

(3)打开命令行输入:scrapy crawl dd --nolog运行爬虫文件,也是运行爬虫项目,因为,爬虫文件相当于是爬虫项目的入口。
语法:scrapy crawl <spider>
结果:
在这里插入图片描述
由上图可以看见,能爬取信息。
到此,用scrapy框架爬取当当网商品信息已经成功!接下来,更进一步,我们可以将爬取到的商品信息存放到数据库中。


(4)打开pipelines.py文件
上面只是检查能否爬取信息,而对于爬取指定信息后的处理需要交给pipelines.py文件处理,比如写入到文件中,或者写入到数据库等等,所以,上面第(2)步中的print(item["title"])不应该写在那里,应该写在pipelines.py文件中。但是,该文件默认是关闭的,我们需要在settings.py文件中去将pipelines.py开启。步骤:在settings.py文件中,按ctrl + f搜索pipe,会定位到下面位置:
在这里插入图片描述
然后去掉注释符就可以了,这样就开启pipelines.py文件了
在这里插入图片描述
(5)编写pipelines.py文件

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

import pymysql

class DangdangPipeline(object):
    def __init__(self):
        # 链接数据库
        self.connect = pymysql.connect(host="127.0.0.1", user="root", passwd="wanghao211", db="dangdang")
        self.cursor = self.connect.cursor()
    def process_item(self, item, spider):
        #将爬取的数据写入数据库
        for i in range(0, len(item["title"])):
            title = item["title"][i]
            link = item["link"][i]
            comment = item["comment"][i]
            sql = "insert into goods(title, link, comment) values('"+title+"','"+link+"','"+comment+"')"
            print(sql)
            try:
                self.cursor.execute(sql)
                #提交操作
                self.connect.commit()
            except Exception as err:
            	# 发生错误时回滚
                self.connect.rollback()
                print(err)
        return item
    def close_spider(self,spider):
        self.cursor.close()
        self.connect.close()

(5)在命令行中运行该爬虫文件,即输入scrapy crawl dd --nolog,得到结果:
在这里插入图片描述
查看数据库中是否写入数据:
在这里插入图片描述
商品从1393开始,是因为我把之前的表中数据以记录日志的方式清除了,所以,这里的id还是接着之前的数据在自增长。
但是,可以看见,商品信息写入数据库成功!

这里是引用

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElegantCodingWH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值