Python数据爬虫学习笔记(21)Scrapy爬取当当图书数据并存储至SQLite数据库

一、需求:在当当网的程序设计类图书商品界面中,爬取图书的名称、详情链接以及评论数,并将信息存储至SQLite数据库。

二、URL及网页源码分析:

1、URL分析,注意到商品搜索页的URL具有以下结构:

2、源码分析,观察网页的源代码,寻找商品名称、商品链接、评论数信息的所在位置。

    1)商品名称:存在于class属性为pic的a标签中的title属性中。

    2)商品链接:与商品名称类似,存在于存在于class属性为pic的a标签中的href属性中。

    3)评论数信息:被name属性为itemlist-review的a标签所包围。

三、编写代码:

1、items.py:

import scrapy

class DangdangItem(scrapy.Item):
    #爬取内容为图书名称、图书链接、图书评论数
    title=scrapy.Field()
    link=scrapy.Field()
    comment=scrapy.Field()

2、settings.py:

# 必须解除遵守robots协议
ROBOTSTXT_OBEY = False
#启用pipelines.py来进行数据处理
ITEM_PIPELINES = {
    'dangdang.pipelines.DangdangPipeline': 300,
}

3、dd.py(笔者创建的爬虫文件):

import scrapy
from dangdang.items import DangdangItem
from scrapy.http import Request

class DdSpider(scrapy.Spider):
    name = 'dd'
    allowed_domains = ['dangdang.com']
    #设置起始URL为商品第一页
    start_urls = ['http://category.dangdang.com/pg1-cp01.54.06.00.00.00.html']
    def parse(self, response):
        item=DangdangItem()
        #设定爬取的XPath表达式
        item["title"]=response.xpath("//a[@class='pic']/@title").extract()
        item["link"] = response.xpath("//a[@class='pic']/@href").extract()
        item["comment"] = response.xpath("//a[@name='itemlist-review']/text()").extract()
        yield item
        #设置爬取前10页
        for i in range(2,11):
            #构造商品URL
            url="http://category.dangdang.com/pg"+str(i)+"-cp01.54.06.00.00.00.html"
            yield Request(url,callback=self.parse)

4、pipelines.py:

import sqlite3

class DangdangPipeline(object):
    def process_item(self, item, spider):
        #连接数据库并创建游标,本文中的dangdang.db为笔者自行创建的数据库文件,结构见本代码后的图片
        conn = sqlite3.connect('E:/dangdang.db')
        cursor=conn.cursor()
        for i in range(0,len(item["title"])):
            title=item["title"][i]
            link=item["link"][i]
            comment=item["comment"][i]
            #构造SQL语句并通过游标执行
            sql = "insert into books values('"+title+"','"+link+"','"+comment+"')"
            cursor.execute(sql)
            #注意必须要提交事件才能够使数据库修改操作生效
            conn.commit()
            #输出爬取的内容
            print(title)
            print(link)
            print(comment)
        #关闭游标以及数据库连接
        cursor.close()
        conn.close()
        return item

    本文创建的SQLite数据库结构:

四、运行结果:

1、PowerShell(CMD)中:

2、SQLite数据库中(笔者使用SQLiteStudio进行数据库管理):

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Scrapy是一种优秀的开源网络爬虫框架,可以用于从网页中爬取数据。借助其强大的功能,我们可以轻松地将爬取到的数据写入数据库。 首先,我们需要创建一个Scrapy项目并配置好爬虫。在项目中,我们可以定义Item类来表示我们需要提取的数据字段。通过编写爬虫规则,我们可以指定要爬取的网页、需要提取的数据字段以及数据的处理方式。 在编写完爬虫规则后,Scrapy会自动将爬取到的数据封装成Item对象。我们可以在爬虫的回调函数中对这些Item对象进行处理,例如将数据写入数据库。 为了将数据写入数据库,我们可以使用Python数据库操作库,如MySQLdb或者pymysql。首先,我们需要连接到数据库,并创建一个数据库连接对象。然后,我们可以将爬取到的数据逐条插入到数据库中。 插入数据的具体步骤如下: 1. 导入数据库操作库 2. 连接到数据库 3. 创建游标对象 4. 遍历爬取到的数据 5. 构造插入语句 6. 执行插入操作 7. 提交事务 8. 关闭游标和数据库连接 通过以上步骤,我们可以将爬取到的数据成功写入数据库。 值得注意的是,在爬取大量数据时,为了提高性能和效率,我们可以使用异步IO库,如aiomysql或aiopg,来实现异步插入操作。 总而言之,Python Scrapy可以轻松实现数据的网页爬取,并通过数据库操作库将数据写入数据库。这样,我们可以方便地对爬取到的数据进行存储和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值