scrapy框架爬取文件到本地以及Mysql数据库

续上一篇的scrapy入门案例的基于终端命令的持久化方式,这篇文章主要讲解,基于管道的持久化保存到本地和MySQL数据库,
主要流程:

1. 数据解析

在main.py文件下,

    def parse(self, response):
        all_data = []
        title_list = response.xpath('/html/body/div[2]/div[1]/main/div/ul/li/a')
        for title in title_list:
            src = title.xpath('./@href')[0].extract()
            chapter = title.xpath('./text()')[0].extract()
            # 向详情页发送url请求
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.197.400 QQBrowser/11.6.5265.400'
            }
            detail = requests.get(url=src, headers=headers)
            # 对爬取的内容进行再次编码
            detail.encoding = 'utf-8'
            detail_text = detail.text
            detail_soup = BeautifulSoup(detail_text, 'lxml')
            content = detail_soup.find('div', class_='grap').text

2. 在item类中定义相关的属性

在items.py文件下,

import scrapy

class Exercise01Item(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    chapter = scrapy.Field()
    content = scrapy.Field()

3. 将解析的数据封装存储到item类型的对象,将item类型的对象提交给管道进行持久化存储的操作

在main.py文件的parse方法内部,

# 实例化一个item对象
            item = Exercise01Item()
            item['chapter'] = chapter
            item['content'] = content
            # 将item对象提交给管道
            yield item

4. 在管道类的process_item中要将其接受到的item对象中存储的数据进行持久化存储操作

在pipeline.py文件中,分别将文件保存在本地和MySQL,需要在mysql中建一个叫novels数据库,创建一个novels表,内含一个chapter字段和content字段,其中,Exercise01Pipeline类是将文件保存到本地的novels.txt文件,MysqlPipeLine类是将文件保存到MySQL端的novels数据库的novels表中。

import pymysql


class Exercise01Pipeline:
    fp = None

    # 重写父类的一个方法:爬虫开始前执行一次,创建并打开文件
    def open_spider(self, spider):
        self.fp = open('./novels.txt', 'w', encoding='utf-8')
        print('正在爬取文件到本地...')

    def process_item(self, item, spider):
        self.fp.write(item['chapter'] + ':' + item['content'] + '\n')
        print(item['chapter'], '在本地爬取成功!')
        return item

    # 爬虫完成后执行一次,关闭文件
    def close_spider(self, spider):
        self.fp.close()
        print('文件爬取成功!')


class MysqlPipeLine(object):
    connect = None
    cursor = None

    def open_spider(self, spider):
        self.connect = pymysql.Connect(host='127.0.0.1', user='root', password='root', database='novels', port=3306, charset='utf8')
        print('正在爬取文件到mysql数据库...')

    def parse(self, item, spider):
        self.cursor = self.connect.cursor()
        # 执行sql语句,事务管理
        try:
            chapter = pymysql.escape_string(item['chapter'])
            content = pymysql.escape_string(item['content'])
            self.cursor.execute('insert into novels values ("%s","%s")' % (chapter, content))
            self.connect.commit()
            print(item['chapter'], '在mysql数据库中插入成功!')
        except Exception as e:
            print(e)
            self.connect.rollback()
        return item

    def close_spider(self, spider):
        self.connect.close()
        # self.cursor.close()
        print('文件在mysql数据库中插入完成!')

5. 在配置文件中开启管道

在settings.py文件中,

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    "exercise01.pipelines.Exercise01Pipeline": 300,
    "exercise01.pipelines.MysqlPipeLine": 301
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Scrapy是一个Python编写的开源网络爬虫框架,它可以帮助开发者快速高效地抓取、处理和存储互联网上的数据。所以,在本地安装Scrapy包是非常有必要的。 首先,我们需要确保本地已经安装了Python解释器。然后,我们可以通过命令行运行以下命令来安装Scrapy包: ``` pip install scrapy ``` 这个命令会自动从Python包索引(PyPI)下载最新版的Scrapy,并完成安装过程。 安装完成后,我们可以通过命令行验证Scrapy是否成功安装。运行以下命令: ``` scrapy --version ``` 如果成功安装,我们会看到Scrapy的版本号。 除了Scrapy包本身,我们还需要安装一些其他依赖项,以确保Scrapy正常工作。这些依赖项包括:Twisted(异步网络框架)、pyOpenSSL(加密协议)、lxml(用于HTML和XML的解析库)等。我们可以使用以下命令一次性安装所有依赖项: ``` pip install twisted pyOpenSSL lxml ``` 安装完成后,我们就可以在本地使用Scrapy了。我们可以使用Scrapy提供的命令行工具来创建和管理我们的爬虫项目。通过运行以下命令,可以创建一个新的Scrapy项目: ``` scrapy startproject project_name ``` 其中,`project_name`是我们为项目指定的名称。 然后,我们可以使用编辑器打开项目文件夹,并在其中定义和配置我们的爬虫。在项目文件夹中的`spiders`文件夹中,我们可以创建一个新的爬虫文件。在这个文件中,我们可以定义我们的爬虫如何解析网页和提取数据。 最后,我们可以在命令行中运行以下命令来启动我们的爬虫: ``` scrapy crawl spider_name ``` 其中,`spider_name`是我们定义的爬虫的名称。 总而言之,通过在本地安装Scrapy包,我们可以轻松开始使用这个强大的网络爬虫框架,并实现高效地抓取、处理和存储互联网上的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Double Handsome

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

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

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

打赏作者

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

抵扣说明:

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

余额充值