使用Scrapy爬取双色球开奖数据:CSV、MySQL和MongoDB存储解决方案

本文详细介绍了如何使用Python的Scrapy框架爬取双色球开奖数据,并将其保存至CSV、MySQL和MongoDB数据库,包括项目创建、爬虫逻辑、数据存储管道的实现和运行过程。
摘要由CSDN通过智能技术生成

使用Scrapy爬取双色球开奖数据:CSV、MySQL和MongoDB存储解决方案 🎲📊

在本篇文章中,我们将探讨如何使用Python的Scrapy框架爬取双色球开奖数据,并将这些数据保存到CSV文件、MySQL数据库以及MongoDB数据库中。通过这个实战项目,你不仅能够学会如何创建和运行一个Scrapy爬虫,还能掌握数据存储的多种实用技术。

创建Scrapy项目

首先,我们需要创建一个Scrapy项目。在终端或命令提示符中,导航到你希望创建项目的目录,并运行以下命令:

scrapy startproject caipiao

接着,为目标网站500.com生成一个爬虫:

cd caipiao
scrapy genspider shuangseqiu 500.com

编写爬虫逻辑

在生成的shuangseqiu爬虫文件中,我们定义了爬虫的解析逻辑,用于从双色球开奖数据页面提取期号、红球和蓝球数据:

import scrapy
from caipiao.items import CaipiaoItem

class ShuangseqiuSpider(scrapy.Spider):
    name = "shuangseqiu"
    allowed_domains = ["500.com"]
    start_urls = ["https://datachart.500.com/ssq/"]

    def parse(self, response):
        tr_list = response.xpath("//tbody[@id='tdata']/tr")
        for tr in tr_list:
            if tr.xpath("./@class").extract_first() == "tdbck":
                continue
            red_ball = tr.xpath("./td[@class='chartBall01']/text()").extract()
            blue_ball = tr.xpath("./td[@class='chartBall02']/text()").extract_first()
            qh = tr.xpath("./td[1]/text()").extract_first()
            yield CaipiaoItem(name="双色球", qihao=qh, red_ball=red_ball, blue_ball=blue_ball)

Item实体类

items.py中,我们定义了用于存储爬取数据的CaipiaoItem实体类:

import scrapy

class CaipiaoItem(scrapy.Item):
    name = scrapy.Field()
    qihao = scrapy.Field()
    red_ball = scrapy.Field()
    blue_ball = scrapy.Field()

数据存储方案

CSV文件存储

我们在pipelines.py中定义了CaipiaoPipeline,用于将爬取的数据保存到CSV文件中:

class CaipiaoPipeline:
    def open_spider(self, spider):
        self.f = open("双色球.csv", "a", encoding="utf-8")

    def close_spider(self, spider):
        self.f.close()

    def process_item(self, item, spider):
        self.f.write(f"{item['name']},{item['qihao']},{','.join(item['red_ball'])},{item['blue_ball']}\n")
        return item

MySQL数据库存储

MysqlPipeline类实现了将数据存储到MySQL数据库的逻辑:

class MysqlPipeline:

    def open_spider(self, spider):
        import pymysql
        self.conn = pymysql.connect(
            host="localhost", user="root", password="123456", database="python", charset="utf8")
        self.cursor = self.conn.cursor()
        print("爬虫开始了")

    def close_spider(self, spider):
        self.cursor.close()
        self.conn.close()
        print("爬虫结束了")

    def process_item(self, item, spider):
        # 将红球列表转换成逗号分隔的字符串
        red_ball_str = ','.join(item['red_ball'])
        # SQL语句
        sql = "insert into shuangseqiu(name, qihao, red_ball, blue_ball) values(%s, %s, %s, %s)"
        # 执行SQL语句,注意将红球列表转换后的字符串传递给SQL
        self.cursor.execute(sql, (item['name'], item['qihao'], red_ball_str, item['blue_ball']))
        self.conn.commit()
        return item

MongoDB数据库存储

MongDBPipeline类实现了将数据存储到MongoDB数据库的逻辑:

class MongDBPipeline:

    def open_spider(self, spider):
        from pymongo import MongoClient
        self.client = MongoClient("mongodb://localhost:27017/")
        self.db = self.client["caipiao"] # 创建数据库
        self.collection = self.db["shuangseqiu"] # 创建集合
        print("爬虫开始了")

    def close_spider(self, spider):
        self.client.close()
        print("爬虫结束了")

    def process_item(self, item, spider):
        self.collection.insert_one(dict(item))
        return item

启用管道

settings.py中启用上述定义的管道:

ITEM_PIPELINES = {
   'caipiao.pipelines.CaipiaoPipeline': 300,
   'caipiao.pipelines.MongDBPipeline': 299,
   'caipiao.pipelines.MysqlPipeline': 298,
}

建表语句

CREATE TABLE `python`.`shuangseqiu`  (
  `name` varchar(255) NULL,
  `qihao` varchar(255) NULL,
  `red_ball` varchar(255) NULL,
  `blue_ball` varchar(255) NULL
);

运行爬虫

最后,运行爬虫,开始爬取双色球开奖数据:

scrapy crawl shuangseqiu

保存结果

csv

在这里插入图片描述

mysql

在这里插入图片描述

MongoDB

在这里插入图片描述


免责声明 ⚠️

本文提供的代码和操作指南仅供学习和研究目的使用。在实际应用中,请严格遵守相关法律法规和目标网站的使用政策。未经允许,不得将爬取的数据用于商业或其他非法用途。作者不承担因使用本文内容而引发的任何法律责任或其他后果。

结语 🌟

通过本文的介绍,你现在应该对如何使用Scrapy框架爬取网页数据,并将数据存储到CSV文件、MySQL和MongoDB数据库中有了一个基本的了解。Scrapy的强大功能和灵活性使其成为处理复杂数据爬取任务的理想选择。

希望这篇文章能够帮助你入门Scrapy,并在数据爬取的领域中迈出坚实的一步。Scrapy的学习之路充满了无限的可能性和挑战,希望你能够不断探索,发现更多的知识和技巧。

如果你觉得这篇文章对你有所帮助,不妨给个👍点赞支持一下。同时,也欢迎关注收藏,这样你就不会错过更多精彩内容。你的支持是我不断前进和分享的动力!

最后,如果有任何问题或想法,欢迎在评论区留言交流。让我们一起学习,一起进步!


  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值