使用Scrapy将数据提取到数据库中,进行处理

news2025/2/28 3:00:25

我们将数据处理的方式,最开始csv文件

再到与数据库建立联系

 代码:

Spider:

import scrapy


class ShuangseqiuSpider(scrapy.Spider):
    name = "shuangseqiu"
    allowed_domains = ["sina.com.cn"]
    start_urls = ["https://view.lottery.sina.com.cn/lotto/pc_zst/index?lottoType=ssq&actionType=chzs&type=50&dpc=1"]

    def parse(self, resp,**kwargs):
        #提取
        trs = resp.xpath("//tbody[@id='cpdata']/tr")
        for tr in trs:  #每一行
            qi = tr.xpath("./td[1]/text()").extract_first()
            hong = tr.xpath("./td[@class='chartball01' or @class='chartball20']/text()").extract()
            lan = tr.xpath("./td[@class='chartball02']/text()").extract()
            #存储
            yield {
                "qi":qi,
                "hong":hong,
                "lan":lan
            }

Pipelines:

# 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
from itemadapter import ItemAdapter
#1.建立联系
        #弄个坐标
        #写入数据
        #提交事务
        #如果报错,回滚
import pymysql
class Caipiao2Pipeline:
    def open_spider(self,spider):#开启文件
        #打开
        self.f = open("data2.csv",mode='a',encoding="utf-8")    #self====>在这个class中定义一个对象

    def close_spider(self,spider):#关闭文件
        self.f.close()

    def process_item(self, item, spider):


        self.f.write(f"{item['qi']}")
        self.f.write(',')
        self.f.write(f"{item['hong']}")
        self.f.write(',')
        self.f.write(f"{item['lan']}")
        self.f.write("\n")
        # with open("data.csv",mode='a',encoding="utf-8") as f:
        #     f.write(f"{item['qi']}")
        #     f.write(',')
        #     f.write(f"{item['hong']}")
        #     f.write(',')
        #     f.write(f"{item['lan']}")
        #     f.write("\n")
        return item
    # 1.建立联系
    # 弄个坐标
    # 写入数据
    # 提交事务
    # 如果报错,回滚
    #数据库
class CaipiaoPipeline_MySQL:
    def open_spider(self, spider):  # 开启文件
        self.conn = pymysql.connect(host="localhost",
                                    port=3306,
                                    user="root",
                                    password="root",database="caipiao")#1.建立联系

    def close_spider(self, spider):  # 关闭文件
        self.conn.close()

    def process_item(self, item, spider):
        try:
            #弄个坐标
            cursor = self.conn.cursor()
            #写入数据
            sql = "insert into shuangseqiu(qi,lan,hong)values(%s,%s,%s)"
            cursor.execute(sql,(item['qi'],item['lan'],"_".join(item['hong'])))
            #提交事务
            self.conn.commit()
        #如果报错,回滚
        except Exception as e:
            print(e)
            self.conn.rollback()

        print("wanbi")
        return item

settings:

 

做这些修改 :

上面的思路就是:

1.在spider里找到,qi,hong,lan的对应的信息。

然后用yield(字典)进行返回到pipelines,给到item。

def process_item(self, item, spider):

2.然后写入到文件csv文件里

两种方法:1.

 with open("data.csv",mode='a',encoding="utf-8") as f:
     f.write(f"{item['qi']}")
     f.write(',')
     f.write(f"{item['hong']}")
     f.write(',')
     f.write(f"{item['lan']}")
     f.write("\n")

                  2.

    def open_spider(self,spider):#开启文件
        #打开
        self.f = open("data2.csv",mode='a',encoding="utf-8")    #self====>在这个class中定义一个对象

    def close_spider(self,spider):#关闭文件
        self.f.close()

这两个就是,在执行管道的时候会在最开始打开,和最后关闭。

self.f = open("data2.csv",mode='a',encoding="utf-8"

用这个打开文件。

3.这个是加入到Mysql中:

# 1.建立联系
# 弄个坐标
# 写入数据
# 提交事务
# 如果报错,回滚

这是思路。

class CaipiaoPipeline_MySQL:
    def open_spider(self, spider):  # 开启文件
        self.conn = pymysql.connect(host="localhost",
                                    port=3306,
                                    user="root",
                                    password="root",database="caipiao")#1.建立联系

    def close_spider(self, spider):  # 关闭文件
        self.conn.close()

    def process_item(self, item, spider):
        try:
            #弄个坐标
            cursor = self.conn.cursor()
            #写入数据
            sql = "insert into shuangseqiu(qi,lan,hong)values(%s,%s,%s)"
            cursor.execute(sql,(item['qi'],item['lan'],"_".join(item['hong'])))
            #提交事务
            self.conn.commit()
        #如果报错,回滚
        except Exception as e:
            print(e)
            self.conn.rollback()

在第二个管道里,在最开始建立联系,然后正常走。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1473333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

17.材质和外观

1.图形学中的材质 在图形学中,材质(Material)是用来描述物体外观和表面特性的属性集合。它包含了控制光的反射、折射、吸收以及其他光学效果的信息,从而决定了物体在渲染过程中的外观。 渲染方程中那一项和材质有关? …

【白话前端】数字孪生(web端)常用技术栈和软件列举

通常友友们看到我发的好看的可是化图片,经常问我是怎么实现的,用的什么软件,其实还真不是一项技术和一个软件就能达成的,这次我分享下web端的技术栈和软件,下次分享桌面端的。 3D建模软件: 数字孪生需要建…

win系统环境变量设置后不马上启用解决方法

目录 1. 刷新系统变量缓存2. 查看环境变量,检查是否真的保存成功了3. 重启系统(最后的玄学)总结 欢迎关注 『发现你走远了』 博客,持续更新中 欢迎关注 『发现你走远了』 博客,持续更新中 1. 刷新系统变量缓存 有时候系统会缓存环境变量,导致…

【计算机网络】1.4 接入网和物理媒体

1.4 接入网和物理媒体 问题:怎样将端系统和边缘路由器连接? 答:有线方式(住宅接入网络、单位接入网络等)或无线方式(无线接入网络)。 有线接入方式 光纤同轴混合网是基于已有的有线电视网开发的…

MWC 2024丨美格智能发布全新5G-A模组及FWA解决方案,将5.5G带入现实

2月26日,在MWC 2024世界移动通信大会上,美格智能正式宣布推出5G-A模组SRM817WE以及全新的5G-A FWA解决方案,包含5G-A CPE解决方案SRT858M、5G-A MiFi解决方案SRT878H和5G-A ODU解决方案SRT853MX,旨在进一步提升网络性能&#xff0…

Gateway网关实战

目录 什么是API网关? 网关为什么出现? 什么是Spring Cloud Gateway? 核心概念 Spring Cloud Gateway实战 路由断言工厂(Route Predicate Factories)配置 路径匹配 Header匹配 过滤器工厂( Gateway…

C语言--- 指针(3)

一.字符指针变量 在指针的类型中&#xff0c;我们知道有一种指针类型为字符指针char * 一般使用&#xff1a; #include<stdio.h> int main() {char ch a;char* p &ch;*p b;printf("%c\n",ch);return 0; } 其实还有一种使用方式 &#xff1a; #inc…

vue2、vue3各自的响应式原理

查看本专栏目录 关于作者 还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#x…

数学建模【相关性模型】

一、相关性模型简介 相关性模型并不是指一个具体的模型&#xff0c;而是一类模型&#xff0c;这一类模型用来判断变量之间是否具有相关性。一般来说&#xff0c;分析两个变量之间是否具有相关性&#xff0c;我们根据数据服从的分布和数据所具有的特点选择使用pearson&#xff…

《论文阅读》一个基于情感原因的在线共情聊天机器人 SIGIR 2021

《论文阅读》一个基于情感原因的在线共情聊天机器人 前言简介数据集构建模型架构损失函数实验结果咨询策略总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Towards an Online Empathetic Chatbot…

MySQL之中文转拼音(全拼音、简拼)

中文转换拼音全称 1、创建拼音对照表 CREATE TABLE IF NOT EXISTS t_base_pinyin (pin_yin_ VARCHAR(255) CHARACTER SET gbk NOT NULL,code_ INT(11) NOT NULL,PRIMARY KEY (code_) ) ENGINEINNODB DEFAULT CHARSETutf8mb4;2、插入对照数据 INSERT INTO t_base_pinyin (pin…

提高办公效率:Excel在文秘与行政办公中的应用技巧

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在当今信息化时代&#xff0c;Excel作为一款常…

STM32程序(移植)中头文件的路径

例:#include "./BSP/LCD/lcd.h"为什么有的头文件加了路径? 先看AI的回答: 在C和C编程中&#xff0c;当我们在源文件中包含&#xff08;或称为“引入”或“导入”&#xff09;一个头文件时&#xff0c;编译器需要知道这个头文件的位置。通常&#xff0c;编译器会在…

hcia datacom课程学习(1):通信基础

1.总体框架 上图为发送方通过互联网传递信息给接收方的过程。 家用路由器会直接集成上图中的四层&#xff08;vlan&#xff0c;DHCP&#xff0c;静态路由&#xff0c;NAT&#xff0c;PPPoE&#xff09;。 2.网络性能指标 &#xff08;1&#xff09;带宽 单位时间内传输的数…

【linux进程信号(一)】信号的概念以及产生信号的方式

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程信号 1. 前言2. 信号的基…

零基础C++开发上位机--基于QT5.15的串口助手(三)

本系列教程本着实践的目的&#xff0c;争取每一节课都带大家做一个小项目&#xff0c;让大家多实践多试验&#xff0c;这样才能知道自己学会与否。 接下来我们这节课&#xff0c;主要学习一下QT的串口编程。做一款自己的串口助手&#xff0c;那么这里默认大家都是具备串口通信…

keil的首次尝试,芯片为stm32F103C6T6

已经试了一下&#xff0c;吐槽这个软件的使用好麻烦啊 安装 然后先去安装对应的pack 这个鬼玩意里找对应的芯片&#xff0c;或者去官网上下载 我是在这里搜到芯片&#xff0c;再去官网下载一个驱动 https://www.keil.arm.com/packs/stm32f1xx_dfp-keil/boards/ 会有一个安装…

Laravel04 eloquent

eloquent 1. eloquent2. 创建eloquent model 以及 取数据 1. eloquent 文档地址&#xff1a; https://learnku.com/docs/laravel/8.x/eloquent/9406 下面是我们&#xff0c;通过laravel的DB类从数据库中获取了post记录&#xff0c;那么有没有可能我们直接获取一个post对象&am…

音频常用测试参数

一、总谐波失真&#xff08;THDN&#xff09; 总谐波失真指音频信号源通过功率放大器时&#xff0c;由于非线性元件所引起的输出信号比输入信号多出的额外谐波成份。谐波失真是由于系统不是完全线性造成的&#xff0c;我们用新增加总谐波成份的均方根与原来信号有效值的百分比来…

如何远程访问内网数据库?

天联是一种专门为远程访问内网数据库而设计的组网解决方案。由于其操作简单、跨平台应用、无网络要求以及独创的安全加速方案等原因&#xff0c;天联在几十万用户中广泛应用&#xff0c;解决了各行业客户的远程连接需求。通过采用穿透技术&#xff0c;天联实现了简单易用的远程…