Scrapy框架爬取股票信息!没点技术还真操作不来!

股票信息爬取问题解析 使用scrapy爬取股票代码时遇到以下问题:(1)'NoneType' object has no attribute 'split';解答        在scrapy shell窗口下使用xpath提取股票代码,开始仅提取一个,很顺利。提取很多,使用for循环遇到了问题,弹出'NoneType' object has no attribute 'split'。意思是在调用split()函数前,... 阅读详情

写在前面

  这个实例我差不多用了一周的时间,终于把所有bug都抓完了,不过还是有一点点遗憾,就是正则表达式部分写的不够完美(本人目前智力、精力实在有限),如果各位大佬有更好的欢迎评论指教。下面我将把我这几天踩的坑,给各位小伙伴们介绍一下,希望各位能够成功避坑,同时也把我的不足之处给大家说明。好了,话不多说,进入正题。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

一、准备工作

  这一部分主要就是选取网站和对网站源代码的查看及观察,具体步骤我在之前的文章写过,有需要的小伙伴可以参考。

传送门: https://blog.youkuaiyun.com/weixin_44578172/article/details/109391135

本例选取的是股城网: https://hq.gucheng.com/gpdmylb.html

二、具体步骤

1.建立工程和Spider模板

  首先win+R 输入cmd进入command模式

scrapy startproject 项目名(GuchengStocks)
cd 项目名(GuchengStocks)
scrapy genspider 爬虫名(stocks) 根链接目录(hq.gucheng.com)
123

2.编写Spider

  这一部分是关键,要编写获取页面和解析页面的代码

import scrapy
import re

class StocksSpider(scrapy.Spider):
    name = "stocks"
    start_urls = ['https://hq.gucheng.com/gpdmylb.html']

    def parse(self, response):
        for href in response.css('a::attr(href)').extract():
            try:
                stock = re.findall(r'[S][HZ]\d{6}', href)[0]
                url = 'https://hq.gucheng.com/' + stock
                yield scrapy.Request(url, callback=self.parse_stock, headers={'user-agent': 'Mozilla/5.0'})
                #第二个参数callback给出了处理当前url给出的新的函数即parse_stock
            except:
                continue

    def parse_stock(self, response):
        infoDict = {}
        stockName = response.css('.stock_price.clearfix')
        #stockInfo = response.css('')
        name = response.css('h3').extract()[0]
        keyList = stockName.css('dt').extract()
        valueList = stockName.css('dd').extract()
        for i in range(len(keyList)):
            key = re.findall(r'<dt>.*<', keyList[i])[0][4:-1]
            #除去爬取的字符串中的无用部分,如&nbsp等,网页抓取时会因为编码原因转化成\xa0,所以我们需要进行替换
            key = key.replace('\u2003', '')
            key = key.replace('\xa0', '')
            #dt标签中存在sup标签,可以用''替换掉
            key = key.replace('<sup></sup>', '')
            try:
                val = re.findall(r'>.*<', valueList[i])[0][1:-1]
            except:
                val = '--'
            infoDict[key] = val

        infoDict.update(
            {'股票名称': re.findall('<h3>.*\)', name)[0][4:]})
        yield infoDict
12345678910111213141516171819202122232425262728293031323334353637383940

3.编写pipelines

  这一部分是在类中定义函数,设置文件的开启和关闭及对应的处理方法

class GuchengstocksInfoPipeline(object):
    #openspider指的是当一个爬虫被调用时对应的pipline启动的方法
    def open_spider(self, spider):
        self.f = open('GuchengStockInfo.txt', 'w')

    #close_spider指的是当一个爬虫关闭时对应的pipline启动的方法
    def close_spider(self, spider):
        self.f.close()

    #对每一个item项进行处理时对应的方法,也是最主体的函数
    def process_item(self, item, spider):
        try:
            line = str(dict(item)) + '\n'
            self.f.write(line)
        except:
            pass
        return item
1234567891011121314151617

4.更改settings

  因为我们新建了一个类,没有用系统的默认类,所以要在相应位置更改配置

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'GuchengStocks.pipelines.GuchengstocksInfoPipeline': 300,
}
12345

5.运行爬虫

键入命令

scrapy crawl 爬虫名(stocks)
1

之后就可以在项目目录下看到有.txt文件了,文件中就是我们爬取到的数据

三、注意事项

  最后说一下我的采坑经历及不完美的地方

1.文件内容为空

  这是让我最头疼的一个问题,我认为我的逻辑没有问题,但爬取后的结果内容就是为空,这里我用的是css选择器。最后在debug的时候灵光一现,想到是不是我的class属性中包含空格的原因导致选择器发生错误,结果上网一查果然有相关资料。比如我要选择的类的属性是"stock_price clearfix",这样提取失败因为在css选择器中,空格表示取子代元素 所以选择器错误地把"stock_price clearfix"当成两个元素看待了,自然提取不到任何元素。解决方法是把空格用"."代替,即stock_price.clearfix就可以了。

2.内容包含其他标签

  我在成功解决上面问题后,发现爬取的数据中包含了dt的子标签sup,并且我多次更改正则表达式也没能将其去掉,最终选择用replace函数去替换他。

key = key.replace('<sup></sup>', '')
1

果然解决了(啊,真香~)

3.不足之处

  虽然replace()函数能够帮助解决一些问题,但并不是真正高级码农所为(我还是太菜了),因为我本身比较菜,最近精力也不太够,所以只能先做到这了,以后再慢慢研究完美的正则表达式的方式,当然各位大佬如果能帮忙解决就再好不过了,欢迎评论指教~

  本篇完,如有错误欢迎指出~

引用源自

 

中国大学MOOC Python网络爬虫与信息提取
https://www.icourse163.org/course/BIT-1001870001

 

用scrapy爬取股票行情 PS:以下内容参照于《Python 3 爬虫、数据清洗与可视化实战》的第五章内容P78-P87 目录 一、创建scrapy项目 二、定义一个item容器 三、定义settings文件进行爬虫基本设置 四、编写爬虫逻辑 五、代码调试 一、创建scrapy项目 任意地方新建文件夹,此文件夹只是为方便管理项目,并非真正的项目文件夹 打开cmd切到项目文件夹,输入以下代码正式创建s... 阅读详情

相关推荐

使用scrapy框架爬取网站《乌龟量化》的股票信息遇到的一些问题即暂时的解决方案

1.登陆过程中遇到的问题 本人想采用第一种登陆方式登陆账号,点击《登陆方式一:账号密码》,就会出现账号密码的输入框。但是网页的网址没有任何改变。所以想使用post请求直接将账号密码传送过去,但是却直接被决绝访问了。返回的是’服务器明白我的意思,但是拒绝访问‘。没办法,只能采用万能的方法了,使用selenium登陆之后再传回cookie进行登陆之后的页面解析行为。 2.cookie的传递过程中遇到的问题 传递了cookie之后,红色框框的数据全部都能访问到(不传递cookie的话只能访问部分),但是黄色框

weixin_45431507的博客 4429

Python爬虫入门实例九之Scrapy框架爬取股票信息(亲测有效)

本篇使用Scrapy框架爬取股票信息并储存在文件中,内涵本人各种采坑经历,希望能够帮助到你哦~

Mr.Q_LuLu的博客 2074

股票数据爬虫(Scrapy框架与requests-bs4-re技术路线)

功能概述:技术:scrapy目标:获取上交所和深交所完整股票的名称与交易信息输出:保存为txt文档获取股票列表:东方财富网:http://quote.eastmoney.com/stocklist.html获取个股信息股市通:https://gupiao.baidu.com/stock/(例)https://gupiao.baidu.com/stock/sz002338.html过程概述编写spi...

weixin_42536176的博客 3608

【个人项目】基于scrapy-redis的股票分布式爬虫实现及其股票预测算法研究

前言 都说做计算机的,项目实践是最能带给人成长的。之前学习了很多的大数据和AI的知识,但是从来没有自己做过一个既包含大数据又包含AI的项目。后来就决定做了个大数据+AI的分布式爬虫系统。下面笔者会讲述整个项目的架构,以及所用到技术点的些许介绍。 项目介绍 这个项目是笔者的个人项目,是基于scrapy-redis框架的股票分布式爬虫框架实现。scrapy是个爬虫框架,但只允许单机的...

jiede1的博客 2450

金融数据分析(五)爬取股票数据——方法二:scrapy爬虫框架

项目二:用两种不同的方法爬取股票数据 方法二:scrapy爬虫框架 此案例是运用scrapy框架对相关内容进行抓取。 安装scrapy框架 打开cmd,输入以下代码进行安装: pip install scrapy 验证是否安装成功: scrapy -h 创建一个新的Scrapy爬虫工程 scrapy安装成功后,继续在cmd里输入代码创建工程。 将目录切换到想要创建爬虫项目的路径下,执行: scrapy startproject baidustocks 执行完毕后,会在目录下生成一系列文件夹和.py等文

修羽的博客 2156

python爬虫:Scrapy框架爬取纳斯达克(NASDAQ)股票数据

思路: 1、纳斯达克网站 https://www.nasdaq.com; 2、以亚马逊AMZN普通股票为例,找到股票历史数据详情页url=https://www.nasdaq.com/market-activity/stocks/amzn/historical; 3、网站采用动态加载数据,使用Selenium获取 AMZN 5年股票历史数据 4、xpath解析数据,保存至csv文件。 一、准备工作...

一半芒果的博客 6021

探秘Scrapy-Redis-MongoDB:一款强大的数据爬取与存储解决方案

探秘Scrapy-Redis-MongoDB:一款强大的数据爬取与存储解决方案 项目简介 是一个基于流行的Python爬虫框架Scrapy、高效的数据队列系统Redis和非关系型数据库MongoDB构建的组合工具。它旨在为大规模网页抓取和数据处理提供一套完整且强大的解决方案,让你能够轻松地进行数据采集、存储和分析。 技术分析 Scrapy Scrapy是Python领域中广泛使用的Web爬虫框架,...

gitblog_00086的博客 561

Python爬虫实例:Scrapy爬取股票信息到SQL数据库

今天给大家分享一个之前完成的爬虫实例,利用Scrapy库和docker爬取股票信息。 这个案例的目标是爬取股票的信息并存放到SQL Server当中。 这应该算是爬虫入门必学的案例了,话不多说,直接上干货。 首先看一下我们今天要用到的库和工具: from scrapy import Spider, Request from scrapy_splash import SplashRequest import scrapy import re from getStock.items import Getstoc

kiligso的博客 2097

Scrapy爬虫基本使用与股票数据Scrapy爬虫

按照生成器的说法,它首先执行for循环,然后执行到yield这行语句的时候,这个函数就会被冻结,而当前yield对应的那一行产生值会被返回出来,所以这个函数在调用的时候,它会首先产生一个值,这个值就是当i等于0的时候的值的平方值,之后会逐渐遍历这个循环。总之,这段代码定义了两个数据处理管道类,它们分别提供了不同的处理方法来处理爬虫抓取到的数据。allowed_domains = ["python123.io"] 最开始用户提交给命令行的域名,指的是爬虫在爬取网站的时候,它只能爬取这个域名以下的相关链接。

薛定谔的猫 1765

基于Scrapy框架的Python股票数据爬取实战项目

经过这一整套流程,我们构建的不再是一个简单的爬虫脚本,而是一个具备高可用性、可观测性和可持续维护能力的数据采集系统。它能够:- 准确提取结构化行情数据;- 自动应对反爬机制;- 多格式输出(CSV + DB);- 定时自动运行;- 记录日志便于排查问题。但这只是起点。未来的优化方向还有很多:引入Prometheus+Grafana做可视化监控;使用Kafka做数据流中转,解耦上下游;接入分布式任务队列(Celery/RQ)提升弹性;

weixin_42607969的博客 1580

用WorkBuddy搭建漫剧AI自动化制作流水线全攻略

在内容创作领域,AI智能体正逐渐从单一工具辅助走向全流程自动化调度。其核心原理是将剧本、分镜、绘图、配音、剪辑等环节拆解为可独立执行的任务单元,由总控系统统一协调,从而大幅降低人力与时间成本。这种模式尤其适用于动态漫画(漫剧)这类环节多、专业度要求高的视频形态。传统制作流程中,角色一致性、配音周期和剪辑返工是公认的效率瓶颈,而借助AI智能体工作台,创作者只需输入故事创意,即可驱动多个数字分身协同完成内容生产。本文以WorkBuddy为例,详细展示如何配置模型、安装技能包并串联五段式流水线,将单集制作成本从万

weixin_28224217的博客 251

Python爬虫实战:利用Scrapy框架,爬取股票信息,详细步骤过程

Python爬虫,通过Scrapy框架,从东方财富网爬取股票代码,并通过雪球网获得股票信息。

FlySky的发问时间 1万+

SAP CO模块实战:成本中心会计分割结构配置全流程(OKES事务码详解)

本文详细解析了SAP CO模块中成本中心会计分割结构的配置全流程,重点讲解了OKES事务码的实战操作。内容涵盖分割结构的概念理解、配置前的次级成本要素与作业类型主数据准备,并通过步骤拆解演示了如何定义分割结构、规则与版本,以及如何将配置关联到成本中心并执行分割。最后提供了常见问题排查与优化建议,旨在帮助顾问及财务人员掌握成本精确分摊的关键配置,确保期末成本核算的准确性。

embedding5hiker的博客 805

Python分别实现基于Request库和Scrapy框架对东方财富股票的爬取

本文将讲述Request库和Scrapy框架实现网页的爬取 一、首先我们来认识一下Request库和Scrapy框架 Request库:Request库是Python公认的优秀的第三方网络爬虫库,能够实现自动爬取HTML页面,自动网络请求提交。 Scrapy框架:功能强大,爬取快速的爬虫框架 二、Request库和Scrapy框架的对比:Request VS Scrapy 2.1 相同点 两者都可以进行页面请求和爬取,Python爬虫的两个主要技术路线 两者可用性都好,文档丰富,入门简单 两者都没

冰河的博客 6590

gm/Id 设计方法

本文介绍gm/Id方法的具体实现。

maxwell2ic的博客 4万+

STM32F4_DHT11数字温湿度传感器

开机的时候先检测是否有DHT11存在,如果没有,则提示错误。DHT11和DS18B20相同,传感器输出的都是未编码的二进制数字。本节我们将利用STM32F4来读取DHT11的温湿度传感器,获取环境的温度和湿度值。因此:温湿度的读取方式就是整数部分的二进制转换成十进制放在整数部分;小数部分的二进制转换成十进制放在小数部分。DHT11和MCU的一次通讯时间最大3ms,主机连续向DHT11采样的间隔建议不小于100ms。DHT11是广州奥松有限公司生产的一款温湿度一体化的数字传感器。数据分小数部分和整数部分。

light_2025的博客 3432

python之scrapy爬取股票信息

如果有错误请指出 爬取的股票数据的位置的确定 步骤 配置并发链接选项 步骤一: 步骤二:编写spider文件 打开对应文件 # -*- coding: utf-8 -*- import scrapy import re class StocksSpider(scrapy.Spider): name = 'stocks' allowed_domains = ['baidu...

giun的博客 4282

ardupilot如何让官网支持自己的硬件方案

本节主要记录ardupilot中如何让官网支持自己的硬件方案。参考1参考2。

陌城烟雨 159

爬虫框架Scrapy实战一——股票数据爬取

简介 目标:获取上交所和深交所所有股票的名称和交易信息。输出:保存到文件中。技术路线:Scrapy爬虫框架语言:python3.5 原理分析 Scrapy框架如下图所示: 我们主要进行两步操作: (1) 首先需要在框架中编写一个爬虫程序spider,用于链接爬取和页面解析; (2) 编写pipelines,用于处理解析后的股票数据并将这些数据存储到文件中。 代码编写 步骤:(...

人生苦短, 还不用Python? 1934

YOLOv10涨点改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF原创自研创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2086

一文让你轻松理解Wi-Fi理论速率计算方式

如上所示,在使用FDM的802.11协议上,最小子载波带宽为312.5KHz,那一个信道频宽为20MHz的信道可以分成64个子载波,但是由于技术原因,有效使用的是52个子载波,实际用于数据传输的只有48个,有4个子载波充当导频载波。载波:交流信号或者直流信号本身不具备数据传输能力,但是如果信号发生很小的波动或者变化,从而实现数据的收发。所谓子载波,就是将信号划为为很多的小信道,这些小信道可以实现数据的并发传输,子载波我们英文称为subcarrier,也称为音调(tone)。Symbol time如下所示。

1042484520@qq.com(邮箱) 3447

python爬虫之Scrapy爬取股票信息的示例

初次使用scrapy框架,对着教程的理解,期待下次的实战

Blackoutdragon的博客 2545

BF8815A

了解ADBMS1818芯片的人会发现,这款BF8815B和1818有着很多相似的东西,当你了解其中一款AFE之后,另一款你的上手也会特别快,下面文章是我针对1818梳理的一些重要知识点,此篇文章主要讲解BF8815B的一些差异点。

m0_61973119的博客 561

scrapy爬取股票信息

这里讨论的股票信息没有隐藏在js当中的方法 首先利用终端/cmd生成项目 scrapy startproject pythonstocks 在进入项目 cd pythstocks 生成stcok爬虫 scrapy genspider stockhq.gucheng.com 这时spider里头生成了爬虫的启动文件stocks.py,编写stocks.py # -*- co...

aaakirito的博客 819

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: Python网络爬虫——爬取小视频网站源视频!自己偷偷看哦!
下一篇: 爬取研招网,考研动态!一手情报,你考研过了吗?
pythonlaodi
博客等级 码龄6年 286粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值