网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中

这篇具有很好参考价值的文章主要介绍了网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

本期内容:基于scrapy+mysql爬取博客信息并保存到数据库中

实验需求

  • anaconda丨pycharm
  • python3.11.4
  • scrapy
  • mysql

项目下载地址:https://download.csdn.net/download/m0_68111267/88740730

实验描述

本次实验实现了:使用Scrapy框架爬取博客专栏的目录信息并保存到MySQL数据库中,实验主要涉及到Python的爬虫技术以及MySQL的基本操作,需要有一定的基础。

实验框架

  • Scrapy

网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中,《 Python实战项目100例 》,数据库,爬虫,scrapy

实验需求

  • Scrapy: Scrapy是一个基于Python的开源网络爬虫框架,用于快速、高效地获取网页数据。它具有强大的抓取能力,支持多线程和分布式爬虫,能够并行爬取多个网页。Scrapy提供了方便的API和丰富的功能,可以自定义爬虫规则和处理流程,支持数据的持久化存储和导出。它还提供了可视化的调试工具和强大的反爬虫策略,可以帮助开发者更轻松地构建和管理网络爬虫。Scrapy是一个成熟、稳定和广泛应用的爬虫框架,被广泛用于数据抓取、搜索引擎和大数据分析等领域。
  • MySQL: MySQL是一个开源的关系型数据库管理系统,由Oracle Corporation开发和维护。它具有高性能、可靠性和稳定性,能够在各种不同规模的应用中存储和管理大量的数据。MySQL使用SQL语言进行数据操作和查询,支持多用户并发操作和事务处理,提供了丰富的功能和灵活的配置选项。它可以在多种操作系统上运行,并且与多种编程语言和开发工具兼容。MySQL被广泛应用于Web应用、企业级应用和大数据分析等领域。

实验内容

1.安装依赖库

本次实验需要安装scrapy库,如果没有scrapy库的话可以运行下面的命令进行安装哦~

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scrapy

2.创建Scrapy项目

  1. 在终端输入以下命令可以创建一个scrapy项目:
scrapy startproject myblog
  1. 项目框架如下:(此时你们应该没有"db.py"和"sp_blogs.py"文件)

网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中,《 Python实战项目100例 》,数据库,爬虫,scrapy

  • spiders:spiders 文件夹是 Scrapy 框架中存放爬虫代码的目录。在 spiders 文件夹中,会包含一个或多个 Python 文件,每个 Python 文件代表一个独立的爬虫。每个爬虫文件都需要继承自 Scrapy 的 Spider 类,并定义爬虫的名称、起始 URL、解析页面的方法等。在爬虫文件中,还可以定义一些其他的属性和方法,来实现对网页的抓取和解析。Scrapy 框架通过读取 spiders 文件夹中的爬虫文件来识别和启动爬虫。在运行爬虫时,可以指定要运行的爬虫名称,Scrapy 将会找到对应的爬虫文件并执行相应的代码。spiders 文件夹是 Scrapy 爬虫的核心部分,开发者可以根据需要在该文件夹下创建多个爬虫文件,以支持同时抓取和解析多个网站。
  • items.py:items.py文件是Scrapy框架中用于定义数据模型的文件,用于指定爬取的数据结构。它定义了爬虫需要爬取和保存的数据字段,类似于数据库表的结构,方便数据的提取和存储。在items.py文件中,使用Python的类来定义数据模型,每个类的属性对应一个需要爬取和保存的字段。
  • middlewares.py:middlewares.py文件是Scrapy框架中用于处理请求和响应的中间件文件。中间件是Scrapy框架的一个重要组成部分,用于对请求进行预处理、对响应进行处理或者是处理异常情况。middlewares.py文件中定义了多个中间件类,每个中间件类都有特定的功能,例如设置请求头、代理设置、处理重定向等。通过在settings.py中配置中间件的顺序,Scrapy框架会按照顺序依次使用不同的中间件对请求和响应进行处理。
  • pipelines.py:pipelines.py文件是Scrapy框架中用于处理数据的管道文件。在Scrapy中,管道是一个用于处理爬取到的数据的组件,可以对数据进行清洗、验证、存储或者是发送到其他系统。pipelines.py文件中定义了多个管道类,每个管道类都有特定的功能,例如将数据存储到数据库、写入文件、发送邮件等。通过在settings.py中配置管道的优先级,Scrapy框架会按照优先级顺序依次使用不同的管道对爬取到的数据进行处理。
  • settings.py:settings.py 文件是 Scrapy 框架中的配置文件,用于管理和配置爬虫的各种设置选项。在 settings.py 文件中,可以设置爬虫的名称、启用或禁用的中间件、管道、下载器、并发请求数、延迟、日志级别等。settings.py 文件包含了许多可配置的选项,可以根据实际需求进行调整。通过修改 settings.py 文件,可以改变爬虫的行为,并对其进行个性化定制。此外,settings.py 文件还提供了一些默认的全局配置选项,这些选项可以决定爬虫的运行方式和输出结果。
  1. 在终端输入以下命令创建爬虫文件
scrapy genspider sp_blogs "https://want595.blog.csdn.net/category_12039968_1.html"

该命令将使用Scrapy生成一个名为"sp_blogs"的爬虫,并将爬虫的起始URL设置为"https://want595.blog.csdn.net/category_12039968_1.html"。(本次实验需要爬取的就是这个专栏的目录)

输入完这个命令后,在spiders的目录下就会出现"sp_blogs.py"这个文件啦~

3.配置系统设置

打开"settings.py"文件,配置系统设置:

网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中,《 Python实战项目100例 》,数据库,爬虫,scrapy
网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中,《 Python实战项目100例 》,数据库,爬虫,scrapy
网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中,《 Python实战项目100例 》,数据库,爬虫,scrapy

4.配置管道文件

"pipelines.py"文件,主要用于编写代码处理爬取的数据,例如存放到文件中,数据库中等等

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


# useful for handling different item types with a single interface
import pymysql
from twisted.enterprise import adbapi


class MyblogPipeline:

    def __init__(self, dbpool):
        self.dbpool = dbpool

    @classmethod
    def from_settings(cls, settings):
        dbparams = dict(
            host=settings['MYSQL_HOST'],  # 读取settings中的配置
            db=settings['MYSQL_DBNAME'],
            user=settings['MYSQL_USER'],
            passwd=settings['MYSQL_PASSWD'],
            charset='utf8',  # 编码要加上,否则可能出现中文乱码问题
            cursorclass=pymysql.cursors.DictCursor,
            use_unicode=False,
        )
        dbpool = adbapi.ConnectionPool('pymysql', **dbparams)  # **表示将字典扩展为关键字参数,相当于host=xxx,db=yyy....
        return cls(dbpool)  # 相当于dbpool付给了这个类,self中可以得到

    # pipeline默认调用
    def process_item(self, item, spider):
        query = self.dbpool.runInteraction(self.insert, item)  # 调用插入的方法
        query.addErrback(self.error, item, spider)  # 调用异常处理方法
        return item

    # 写入数据库中
    def insert(self, db, item):
        # print item['name']
        sql = "insert ignore into blogs(title,url) values(%s,%s)"
        params = (item["name"], item["url"])
        db.execute(sql, params)

    # 错误处理方法
    def error(self, failue, item, spider):
        print(failue)

该代码是一个Twisted框架下的MySQL数据库存储的Pipeline。Twisted是一个事件驱动的网络框架,使用异步的方式处理网络请求。

该代码中的MyblogPipeline类继承自object类,并且实现了__init__from_settingsprocess_iteminserterror方法。

  • __init__方法初始化了一个数据库连接池dbpool,并将其赋值给self.dbpool

  • from_settings方法从配置文件中读取数据库的相关配置信息,并利用这些信息创建一个数据库连接池dbpool

  • process_item方法是Pipeline默认调用的方法,用于处理item并存储到数据库中。在该方法中,首先调用self.dbpool.runInteraction()方法创建一个操作数据库的事务,并调用self.insert方法将item插入到数据库中。然后,通过addErrback方法添加了一个异常处理方法self.error

  • insert方法接收两个参数,一个是数据库连接对象db,一个是item。在该方法中,定义了一个SQL语句和参数,并通过db.execute()方法执行了数据库插入操作。

  • error方法用于处理插入数据库时的异常情况,将异常信息打印出来。

总体而言,该代码实现了将爬取的数据存储到MySQL数据库中的功能。

5.连接数据库

新建一个"db.py"文件,输入以下代码连接到本地数据库,运行后创建一个表,用于保存等会爬取的数据。

import pymysql
from scrapy.utils.project import get_project_settings  # 导入seetings配置


class DBHelper:

    def __init__(self):
        self.settings = get_project_settings()  # 获取settings配置,设置需要的信息

        self.host = self.settings['MYSQL_HOST']
        self.port = self.settings['MYSQL_PORT']
        self.user = self.settings['MYSQL_USER']
        self.passwd = self.settings['MYSQL_PASSWD']
        self.db = self.settings['MYSQL_DBNAME']

    # 连接到具体的数据库(settings中设置的MYSQL_DBNAME)
    def connectDatabase(self):
        conn = pymysql.connect(host=self.host,
                               port=self.port,
                               user=self.user,
                               passwd=self.passwd,
                               db=self.db,
                               charset='utf8')  # 要指定编码,否则中文可能乱码
        return conn

    # 创建表
    def createTable(self, sql):
        conn = self.connectDatabase()
        cur = conn.cursor()
        try:
            cur.execute(sql)
            cur.close()
            conn.close()
            print("创建表成功!")
        except:
            print("创建表失败!")
            pass

    # 插入数据
    def insert(self, sql, *params):  # 注意这里params要加*,因为传递过来的是元组,*表示参数个数不定
        conn = self.connectDatabase()
        cur = conn.cursor();
        cur.execute(sql, params)
        conn.commit()  # 注意要commit
        cur.close()
        conn.close()

if __name__ == "__main__":
    dbHelper = DBHelper()
    sql = "create table pictures(id int primary key auto_increment,name varchar(50) unique,url varchar(200))"
    dbHelper.createTable(sql)

这段代码是一个用于操作MySQL数据库的助手类。它使用了Scrapy框架的get_project_settings函数来获取配置信息,然后根据配置信息连接到数据库。

在初始化方法中,它获取到了MySQL数据库的主机地址、端口号、用户名、密码和数据库名,并保存在实例变量中。

  • connectDatabase方法用于连接到具体的数据库,并返回一个数据库连接对象。

  • createTable方法用于创建表,它接受一个SQL语句作为参数,使用数据库连接对象执行SQL语句来创建表。

  • insert方法用于插入数据,它接受一个SQL语句和参数作为参数,使用数据库连接对象执行SQL语句来插入数据。

最后在主函数中,创建了一个DBHelper对象,并调用createTable方法来创建一个名为pictures的表。

6.分析要爬取的内容

本实验要爬取的是博客专栏的目录信息:

网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中,《 Python实战项目100例 》,数据库,爬虫,scrapy
网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中,《 Python实战项目100例 》,数据库,爬虫,scrapy

7.编写爬虫文件

编写"spiders"目录下的"sp_blogs.py"文件,实现博客信息的爬取:

import scrapy
from scrapy import Selector, cmdline


class MyblogItem(scrapy.Item):
    name = scrapy.Field()
    url = scrapy.Field()


class SpBlogsSpider(scrapy.Spider):
    name = "sp_blogs"
    allowed_domains = ["want595.blog.csdn.net"]

……请下载后查看完整代码哦

这段代码是一个基于Scrapy框架的爬虫,用于爬取一个博客网站的文章标题和链接。

首先定义了一个MyblogItem类,它继承自scrapy.Item,并定义了两个字段nameurl,用于保存文章的标题和链接。

然后定义了一个SpBlogsSpider类,它继承自scrapy.Spider,表示一个具体的爬虫。在SpBlogsSpider类中,指定了爬虫的名字为sp_blogs,指定了允许爬取的域名为want595.blog.csdn.net,并指定了要爬取的起始URL。起始URL使用了一个循环生成器,生成了多个URL,用于爬取多页的数据。

parse方法是默认的回调方法,在爬取网页的响应返回后自动被调用。在parse方法中,使用Selector对象对响应进行了解析,提取出了文章的标题和链接,并将它们保存到MyblogItem对象中,然后通过yield返回给引擎。

最后,通过调用cmdline.execute函数来执行爬虫。执行时会根据给定的参数调用对应的爬虫。在这里,使用'scrapy crawl sp_blogs'参数来执行sp_blogs爬虫。(也可以在终端项目的根目录下运行scrapy crawl sp_blogs命令来执行爬虫。)

运行结果

爬取的博客信息如下:

网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中,《 Python实战项目100例 》,数据库,爬虫,scrapy

写在后面

我是一只有趣的兔子,感谢你的喜欢!文章来源地址https://www.toymoban.com/news/detail-797263.html

到了这里,关于网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析

    本期内容 :基于requests+mysql爬取猫眼热门电影数据做可视化分析 实验需求 anaconda丨pycharm python3.11.4 requests mysql 项目下载地址:https://download.csdn.net/download/m0_68111267/88737727 学习网络爬虫相关技术,熟悉爬虫基本库requests的使用;学习数据库技术,熟悉mysql数据库的基本操作。本文

    2024年02月02日
    浏览(37)
  • scrapy爬虫爬取多网页内容

    摘要 :此案例是爬取目标网站( https://tipdm.com/ )的 新闻中心 板块的 公司新闻 中所有新闻的标题、发布时间、访问量和新闻的文本内容。 我使用的是 Anaconda prompt 我们使用如下命令创建scrapy项目: scrapy startproject spider_name 爬虫路径 spider_name 是项目的名字 爬虫路径 就是项目

    2023年04月21日
    浏览(38)
  • 【爬虫】4.3 Scrapy 爬取与存储数据

    目录 1. 建立 Web 网站 2. 编写数据项目类 3. 编写爬虫程序 MySpider 4. 编写数据管道处理类 5. 设置 Scrapy 的配置文件         从一个网站爬取到数据后,往往要存储数据到数据库中,scrapy 框架有十分方便的存储方法,为了说明这个存储过程,首先建立一个简单的网站,然后写

    2024年02月09日
    浏览(46)
  • 爬虫学习笔记-scrapy爬取电影天堂(双层网址嵌套)

      1.终端运行scrapy startproject movie,创建项目 2.接口查找  3.终端cd到spiders,cd scrapy_carhome/scrapy_movie/spiders,运行 scrapy genspider mv https://dy2018.com/ 4.打开mv,编写代码,爬取电影名和网址 5.用爬取的网址请求,使用meta属性传递name ,callback调用自定义的parse_second 6.导入ScrapyMovieItem,将movie对象

    2024年02月19日
    浏览(49)
  • python爬虫实战 scrapy+selenium爬取动态网页

    最近学习了scrapy爬虫框架,想要找个目标练练手。由于现在很多网页都是动态的,因此还需要配合selenium爬取。本文旨在记录这次学习经历,如有疑问或不当之处,可以在评论区指出,一起学习。 对scrapy不了解的同学可以阅读这篇文章 爬虫框架 Scrapy 详解,对scrapy框架介绍的

    2024年02月07日
    浏览(79)
  • Python爬虫之Scrapy框架系列(23)——分布式爬虫scrapy_redis浅实战【XXTop250部分爬取】

    先用单独一个项目来使用scrapy_redis,讲解一些重要点!

    2024年02月16日
    浏览(49)
  • 使用PyCharm编写Scrapy爬虫程序,爬取古诗词网站

    本次测试案例参考厦门大学数据库实验室 链接: https://dblab.xmu.edu.cn/blog/3937/ 在PyCharm中新建一个名称为“scrapyProject”的工程,如下图所示,Python解释器就选择我们之前已经安装好的 本次测试环境为 Python3.7.6 在“scrapyProject”工程底部打开Terminal窗口(如下图所示),在命令提示

    2024年02月11日
    浏览(43)
  • python爬虫之Scrapy框架--保存图片(详解)

    目录 Scrapy 使用ImagePipeline 保存图片 使用图片管道  具体步骤 安装相关的依赖库 创建Scrapy项目 配置settings.py   定义Item  编写Spider 运行Spider Scrapy 自定义ImagePipeline 自定义图片管道 Scrapy提供了一个 ImagePipeline ,用来下载图片这条管道,图片管道 ImagesPipeline  提供了方便并具有

    2024年02月11日
    浏览(45)
  • 07_scrapy的应用——获取电影数据(通过excel保存静态页面scrapy爬虫数据的模板/通过数据库保存)

    一般我们自己创建的一些python项目,我们都需要创建虚拟环境,其中会下载很多包,也叫做依赖。但是我们在给他人分享我们的项目时,不能把虚拟环境打包发送给别人,因为每个人电脑系统不同,我们可以把依赖导出为依赖清单,然后别人有了我们的依赖清单,就可以用一

    2024年02月09日
    浏览(38)
  • 使用 Scrapy 和 Selenium 爬取 Boss 直聘职位信息(可视化结果)

    在本博客中,我们将介绍如何使用 Scrapy 和 Selenium 来爬取 Boss 直聘 网站上的职位信息。Boss 直聘是一个广受欢迎的招聘平台,提供了大量的职位信息,以及公司和 HR 的联系信息。通过本文的指南,你将学会如何创建一个爬虫来抓取特定城市的 Python 职位信息。 在这个示例中,

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包