python爬虫进阶篇:利用Scrapy爬取同花顺个股行情并发送邮件通知

一、前言

上篇笔记我记录了scrapy的环境搭建和项目创建和第一次demo测试。本篇我们来结合现实场景利用scrapy给我们带来便利。
有炒股或者其它理财产品的朋友经常会关心每日的个股走势,如果结合爬虫进行实时通知自己,并根据自己预想的行情进行邮件通知(比如某个股票如果到达100块钱就发邮件通知自己),这样会大大提高我们的炒股收益。

二、需求分析

  • 目标网站:同花顺A股市场行情
  • 目标数据:
    • 股票代码
    • 股票名称
    • 股票价格
    • 股票涨跌
      在这里插入图片描述

三、代码实现

  • 设置爬取的目标网页
    def start_requests(self):
        urls = [
            "http://q.10jqka.com.cn/"
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

  • 解析目标信息的网页结构
    def parse(self, response):
        # 股票代码列表
        stock_id_list = response.css("div#maincont table.m-table.m-pager-table td:nth-child(2) a::text").extract()
        # 股票名称列表
        stock_name_list = response.css("div#maincont table.m-table.m-pager-table td:nth-child(3) a::text").extract()
        # 股票价格列表
        price_list = response.css("div#maincont table.m-table.m-pager-table td:nth-child(4)::text").extract()
        # 股票涨跌列表
        speed_up_list = response.css("div#maincont table.m-table.m-pager-table td:nth-child(6)::text").extract()

        for i in range(len(stock_id_list)):
            stock_id = stock_id_list[i]
            stock_name = stock_name_list[i]
            price = price_list[i]
            speed_up = speed_up_list[i]
            # 存到item,用来持久化
            item = ScrapyDemoItem()
            item["stock_id"] = stock_id
            item["stock_name"] = stock_name
            item["price"] = price
            item["speed_up"] = speed_up
            yield item
  • 处理爬取的目标信息
    • 将目标信息存储为html形式
   def __init__(self):
        self.html = '<html><head><meta charset="utf-8"></head><body><table>'

    def process_item(self, item, spider):
        self.html = self.html + '<tr>'
        self.html = self.html + '<td>%s</td>' % item["stock_id"]
        self.html = self.html + '<td>%s</td>' % item["stock_name"]
        self.html = self.html + '<td>%s</td>' % item["price"]
        self.html = self.html + '<td>%s</td>' % item["speed_up"]
        self.html = self.html + '</tr>'

        return item

    def close_spider(self, spider):
        self.html = self.html + '</table></body></html>'
        self.send_email(self.html)
        print()
  • 发送邮件
    结合之前写的python发邮件的知识点《Python:发送qq邮箱只需几行代码轻松搞定》,将html内容发送到邮箱中
    def send_email(self, html):
        # 设置邮箱账号
        account = "xxx@qq.com"
        # 设置邮箱授权码
        token = "xxx"
        # 实例化smtp对象,设置邮箱服务器,端口
        smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)

        # 登录qq邮箱
        smtp.login(account, token)

        # 添加正文,创建简单邮件对象
        email_content = MIMEText(html, 'html', 'utf-8')

        # 设置发送者信息
        email_content['From'] = 'xxx@qq.com'
        # 设置接受者信息
        email_content['To'] = '技术总是日积月累的'
        # 设置邮件标题
        email_content['Subject'] = '来自code_space的一封信'

        # 发送邮件
        smtp.sendmail(account, 'xxx@qq.com', email_content.as_string())
        # 关闭邮箱服务
        smtp.quit()

在这里插入图片描述

四、拓展

Scrapy是个很好用的框架,结合日常生活中的需求,我们可以写很多给我们带来便利的工具,以后会补上各种我多年来使用过的工具代码,都是基于Scrapy的使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java对接腾讯多人音视频房间示例

最近在对接腾讯的多人音视频房间&#xff0c;做一个类似于腾讯会议的工具&#xff0c;至于为什么不直接用腾讯会议&#xff0c;这个我也不知道&#xff0c;当然我也不敢问 首先是腾讯官方的文档地址&#xff1a;https://cloud.tencent.com/document/product/1690 我是后端所以…

【Spring】11 EnvironmentAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点&#xff0c;其中之一就是 Bean 生命周期中的回调接口。本文将着重介绍一个与环境&#xff08;Environment&#xff09;相关…

第三讲GNSS相关时间系统和转换 第四讲观测值的产生和分类 | GNSS(RTK)课程学习笔记day2

说明&#xff1a;以下笔记来自计算机视觉life吴桐老师课程&#xff1a;从零掌握GNSS、RTK定位[链接]&#xff0c;从零掌握RTKLIB[链接]。非原创&#xff01;且笔记仅供自身与大家学习使用&#xff0c;无利益目的。 第三讲 GNSS相关时间系统和转换 GPS卫星的位置在时间过程中是…

【数据结构】(堆)Top-k|堆排序

目录 概念&#xff1a; 堆的实现 构建 初始化 销毁 插入元素 往上调整 删除堆顶元素 往下调整 返回堆顶元素 返回有效个数 是否为空 堆排序 Top-k问题 ​编辑 创建数据 堆top-k 概念&#xff1a; 堆是将数据按照完全二叉树存储方式存储到一维数组中&#xff…

python的argparse在celery中调用parser.parse_args()参数解析报错解决

文章目录 一、前言二、报错提示三、解决方案四、总结 一、前言 调用flask中的api接口&#xff0c;会调用我的异步函数&#xff0c;而异步函数是在celery框架中执行 下图的执行流程也没有问题 经过调试发现问题出在**parser.parse_args()**函数这里 二、报错提示 命令行运行…

在Pytorch中自定义dataset读取数据

这里使用的是经典的花分类数据集 下载地址&#xff1a;https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz 下载结束后进行解压&#xff0c;可以得到五种不同种类花的图片&#xff0c;如上图所示 主函数 main def main():device tor…

zookeeper:启动后占用8080端口问题解决

ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务。它为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、分布式同步、组服务等。 我们经常在运行zookeeper服务时&#xff0c;不需要配置服务端口&#xff0c;…

二叉树的最大深度(LeetCode 104)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一&#xff1a;深度优先搜索GolangC 方法二&#xff1a;广度优先搜索GolangC 参考文献 1.问题描述 给定一个二叉树 root &#xff0c;返回其最大深度。 叉树的「最大深度」是指从根节点到最远叶子节点的最长路径上的节…

Apollo开放平台9.0让自动驾驶开发者轻松上手

文章目录 平台架构&#xff1a;基础环境&#xff1a;开始使用&#xff1a;体验心得: 在自动驾驶技术飞速发展的今天&#xff0c;成为这个领域的一名开发者是一次挑战、一次冒险&#xff0c;更是一次心灵之旅。作为这个领域的先锋之一&#xff0c;Apollo开放平台9.0于12月19日发…

TSINGSEE青犀边缘AI计算基于车辆结构化数据的车辆监控方案

随着人工智能技术的不断发展&#xff0c;边缘AI技术逐渐成为智能交通领域的研究热点。其中&#xff0c;基于边缘AI的车辆结构化数据技术与车辆监控系统是实现智能交通系统的重要手段之一。为了满足市场需求&#xff0c;TSINGSEE青犀边缘AI智能分析网关/视频智能分析平台推出了一…

【百度PARL】强化学习笔记

文章目录 强化学习基本知识一些框架Value-based的方法Q表格举个例子 强化的概念TD更新 Sarsa算法SampleSarsa Agent类 On_policy vs off_policy函数逼近与神经网络DQN算法DQN创新点DQN代码实现model.pyalgorithm.pyagent.py总结&#xff1a;举个例子 实战 视频&#xff1a;世界…

【SQL】根据年月,查询月份中每一天的数据量

传入YYYY-MM-01&#xff0c;查询这个月中每一天的数据量&#xff0c;没有数据的天数用0表示 WITH RECURSIVE DateRange AS (SELECT :startDate AS DateUNION ALLSELECT DATE_ADD(Date, INTERVAL 1 DAY) FROM DateRangeWHERE Date < LAST_DAY(:startDate) ) SELECTdr.Date,CO…

docker中如何使用Arthas

docker中如何使用Arthas 一、操作步骤1、首先拷贝arthas包下来&#xff1a;2、其次选中你需要查看的容器ID&#xff1a;3、拷贝arthas程序包到容器目录下&#xff1a;4、进入到容器目录5、进入到第3步映射到容器的路径&#xff0c;并使用ll查看是否存在 arthas-boot.jar6、使用…

全球移动通信(2G/3G/4G/5G)频谱分布情况

一、概述 随着通信技术的不断发展&#xff0c;全球各国都在积极推进2G、3G、4G、5G网络的建设和应用。根据FCC统计&#xff0c;目前全球移动通信频谱分布如下&#xff1a; 二、分布 &#xff08;一&#xff09;俄罗斯 2G&#xff1a;主要使用900MHz和1800MHz两个频段。其中&…

Postman接口测试之Postman常用的快捷键

作为一名IT程序猿&#xff0c;不懂一些工具的快捷方式&#xff0c;应该会被鄙视的吧。收集了一些Postman的快捷方式&#xff0c;大家一起动手操作~ 简单操作 xc 请求 操作MAC系统windows系统请求网址 ⌘L Ctrl L 保存请求 ⌘S Ctrl S 保存请求为 ⇧⌘S Ctrl Shift S发送…

云原生之深入解析Kubernetes集群发生网络异常时如何排查

一、Pod 网络异常 网络不可达&#xff0c;主要现象为 ping 不通&#xff0c;其可能原因为&#xff1a; 源端和目的端防火墙&#xff08;iptables, selinux&#xff09;限制&#xff1b; 网络路由配置不正确&#xff1b; 源端和目的端的系统负载过高&#xff0c;网络连接数满…

如何搭建一个买衣服的微信小程序商城

随着移动互联网的普及&#xff0c;微信小程序商城已经成为众多商家开展线上业务的重要平台。本文将介绍如何搭建一个卖衣服的微信小程序商城&#xff0c;帮助您实现线上业务的拓展。 第一步&#xff1a;登录乔拓云平台进入商城后台管理页面 在浏览器中搜索乔拓云平台并登录&a…

广汽本田售后服务技术技能竞赛总决赛

从2001年开始&#xff0c;广汽本田售后服务技术技能大赛年年举办&#xff0c;层层筛选、择优选拔&#xff0c;以赛促练全面提升服务领域一线人员的业务能力。 广汽本田售后服务技术技能大赛在赛程设置、考核内容和形式等方面进行了全面升级与强化&#xff0c;创新突破服务精英的…

科士达新能源荣获CTC国检集团“产品碳足迹证书”

2023年12月14-15日&#xff0c;“2023光伏行业年度大会”在江苏省宿迁市召开&#xff0c;行业主管部门、行业组织、知名专家和光伏企业等代表莅临现场。科士达新能源受邀出席&#xff0c;并在同期举办的”光伏产品碳足迹与碳中和研讨会”上&#xff0c;荣获CTC国检集团“产品碳…

WebMvcConfigurer接口详解及使用方式(Spring-WebMvc)

简介 如下图所示WebMvcConfigurer是spring-webmvc jar包下的一个接口&#xff0c;spring-webmvc jar包又来源于spring-boot-starter-web&#xff0c;所以要使用WebMvcConfigurer要引入spring-boot-starter-web依赖。WebMvcConfigurer接口提供了常用的web应用拦截方法。通过实现…