爬取东方财富股票代码

我们打开东方财富网站:http://quote.eastmoney.com/stocklist.html

假如懒得爬,也可以用现成的股票数据源:https://stockapi.com.cn
在这里插入图片描述

在这里插入图片描述
这展示了所有股票信息,不过需要我们分页去爬取
我们可以查询具体的html代码:

<div class="stock-info" data-spm="2"><div class="stock-bets"><h1><a class="bets-name" href="/stock/sz300388.html">国祯环保 (<span>300388</span>)</a><span class="state f-up">已休市 2017-09-29  15:00:03</span></h1><div class="price s-stop "><strong  class="_close">--</strong><span>--</span><span>--</span></div><div class="bets-content"><div class="line1"><dl><dt>今开</dt><dd class="">19.92</dd></dl><dl><dt>成交量</dt><dd>8917</dd></dl><dl><dt>最高</dt><dd class="s-up">20.15</dd></dl><dl><dt>涨停</dt><dd class="s-up">21.96</dd></dl><dl><dt>内盘</dt><dd>4974</dd></dl><dl><dt>成交额</dt><dd>1786.10</dd></dl><dl><dt>委比</dt><dd>-50.69%</dd></dl><dl><dt>流通市值</dt><dd>59.98亿</dd></dl><dl><dt class="mt-1">市盈率<sup>MRQ</sup></dt><dd>50.59</dd></dl><dl><dt>每股收益</dt><dd>0.20</dd></dl><dl><dt>总股本</dt><dd>3.06亿</dd></dl><div class="clear"></div></div><div class="line2"><dl><dt>昨收</dt><dd>19.96</dd></dl><dl><dt>换手率</dt><dd>0.30%</dd></dl><dl><dt>最低</dt><dd class="s-down">19.92</dd></dl><dl><dt>跌停</dt><dd class="s-down">17.96</dd></dl><dl><dt>外盘</dt><dd>3943</dd></dl><dl><dt>振幅</dt><dd>1.15%</dd></dl><dl><dt>量比</dt><dd>0.11</dd></dl><dl><dt>总市值</dt><dd>61.35亿</dd></dl><dl><dt>市净率</dt><dd>3.91</dd></dl><dl><dt>每股净资产</dt><dd>5.14</dd></dl><dl><dt>流通股本</dt><dd>2.99亿</dd></dl></div><div class="clear"></div></div></div>

发现股票名称在class="bets-name"的a标签中,其他的数据都在dt和dd标签中

import requests
from bs4 import BeautifulSoup
import re#优化,可以减少程序判断编码所花费的时间
def getHTMLText(url, code='UTF-8'):try:r = requests.get(url)r.raise_for_status()r.encoding = codereturn r.textexcept:return ""def getStockList(url, stockList):html = getHTMLText(url, 'GB2312')soup = BeautifulSoup(html, 'html.parser')aInformaton = soup.find_all('a')for ainfo in aInformaton:try:stockList.append(re.findall(r'[s][hz]\d{6}', ainfo.attrs['href'])[0])except:continuedef getStockInformation(detailUrl, outputFile, stockList):count = 0for name in stockList:count = count + 1stockUrl = detailUrl + name + '.html'html = getHTMLText(stockUrl)try:if html == "":continuestockDict = {}soup = BeautifulSoup(html, 'html.parser')stockinfo = soup.find('div', attrs={'class': 'stock-bets'})stockname = stockinfo.find('a', attrs={'class': 'bets-name'})# 当标签内部还有标签时,利用text可以得到正确的文字,利用string可能会产生NonestockDict["股票名称"] = stockname.text.split()[0]stockKey = stockinfo.find_all('dt')stockValue = stockinfo.find_all('dd')for i in range(len(stockKey)):stockDict[stockKey[i].string] = stockValue[i].string#\r移动到行首,end=""不进行换行print("\r{:5.2f}%".format((count / len(stockList) * 100)), end='')#追加写模式'a'f = open(outputFile, 'a')f.write(str(stockDict) + '\n')f.close()except:print("{:5.2f}%".format((count / len(stockList) * 100)), end='')continuedef main():listUrl = 'http://quote.eastmoney.com/stocklist.html'detailUrl = 'https://gupiao.baidu.com/stock/'outputFile = 'C:/Users/Administrator/Desktop/out.txt'stockList = []getStockList(listUrl, stockList)getStockInformation(detailUrl, outputFile, stockList)
main()

方法2.采用Scrapy框架和正则表达式库
(1)建立工程和Spider模板(保存为stocks.py文件)
在命令行中进入:E:\PythonProject\BaiduStocks

输入:scrapy startproject BaiduStocks 建立了scrapy工程

输入:scrapy genspider stocks baidu.com 建立spider模板,baidu.com是指爬虫限定的爬取域名,在stocks.py文件删去即可

(2)编写spider爬虫(即stocks.py文件)
采用css选择器,可以返回选择的标签元素,通过方法extract()可以提取标签元素为字符串从而实现匹配正则表达式的处理

正则表达式详解:

<a class="bets-name" href="/stock/sz300388.html">国祯环保 (<span>300388</span>)</a>

re.findall(‘.(‘, stockname)[0].split()[0] + ‘(’+re.findall(’>.<’, stockname)[0][1:-1]+‘)’

匹配结果:国祯环保(300388)

因为’('为正则表达式语法里的基本符号,所以需要转义

正则表达式从每行开始匹配,匹配之后返回[’ 国祯环保 ('],采用split将空白字符分割,返回[‘国祯环保’,‘(’]

# -*- coding: utf-8 -*-
import scrapy
import reclass StocksSpider(scrapy.Spider):name = 'stocks'start_urls = ['http://quote.eastmoney.com/stocklist.html']def parse(self, response):fo=open(r'E:\PythonProject\BaiduStocks\oo.txt','a')#fo.write(str(response.css('a').extract()))count=0for href in response.css('a').extract():try:if count == 300:breakcount=count+1stockname=re.findall(r'[s][hz]\d{6}',href)[0]stockurl='https://gupiao.baidu.com/stock/' + stockname + '.html'#fo.write(stockurl)yield scrapy.Request(url= stockurl,headers={"User-Agent":"Chrome/10"} ,callback=self.stock_parse)except:continuepassdef stock_parse(self,response):ffo=open(r'E:\PythonProject\BaiduStocks\stockparse.txt','a')stockDict={}#提取标签中class="stock-bets"的标签元素stockinfo=response.css('.stock-bets')#将提取出来的标签转化为字符串列表,然后取第一个stockname=stockinfo.css('.bets-name').extract()[0]#ffo.write(stockname)keyList=stockinfo.css('dt').extract()#ffo.write(str(keyList))valueList=stockinfo.css('dd').extract()stockDict['股票名称'] = re.findall('.*\(', stockname)[0].split()[0] + '('+re.findall('\>.*\<', stockname)[0][1:-1]+')'for i in range(len(keyList)):stockkey=re.findall(r'>.*</dt>',keyList[i])[0][1:-5]stockvalue=re.findall(r'>.*</dd>',valueList[i])[0][1:-5]stockDict[stockkey]=stockvalueyield stockDict

(3)编写PipeLine(即pipelines.py文件)

系统自动生成了Item处理类BaiduStocksPipeline,我们不采用系统生成,新建一个BaiduStocksinfoPipeline类,并书写Item处理函数

# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.htmlclass BaidustocksPipeline(object):def process_item(self, item, spider):return itemclass BaidustocksinfoPipeline(object):#爬虫打开时执行def open_spider(self,spider):self.f=open(r'E:\PythonProject\BaiduStocks\BaiduStocks\asdqwe.txt','a')# 爬虫关闭时执行def close_spider(self,spider):self.f.close()#处理Item项def process_item(self,item,spider):try:self.f.write(str(item)+'\n')except:passreturn item

此时要修改配置文件setting.py文件

ITEM_PIPELINES = {'BaiduStocks.pipelines.BaidustocksinfoPipeline': 300,
}

(4)运行爬虫:scrapy crawl stocks

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

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

相关文章

服装连锁收银软件哪个好用

竞争激烈的服装连锁行业&#xff0c;选择一款高效可靠的收银软件至关重要。商淘云连锁收银软件作为业内领先的解决方案之一&#xff0c;备受关注和好评。本文将介绍商淘云连锁收银软件&#xff0c;并分享其在提升服装连锁店效率和客户体验方面的优势。 1. 商淘云连锁收银软件的…

ChatGPT:打造高质量论文的秘密武器

ChatGPT无限次数:点击直达 ChatGPT&#xff1a;打造高质量论文的秘密武器 在当今信息爆炸的时代&#xff0c;高质量的论文写作对于学术研究者和科技领域的从业者来说至关重要。然而&#xff0c;写作是一项需要耗费大量时间和精力的任务&#xff0c;在写作过程中还常常会遇到思…

go服务k8s容器化之grpc负载均衡

理论&#xff1a; 1.grpc基于HTTP/2实现&#xff0c;HTTP2是长连接的&#xff0c;io多路复用&#xff0c;即在一条tcp连接上可以发起多个rpc请求, 请求通过流id 也就是streamID划分。 2.k8s是L4层负载均衡&#xff0c;也就是TCP那层&#xff0c;支持tcp的流量转发&#xff0c;…

异地组网如何安装?

【天联】是一款强大的异地组网安装工具&#xff0c;可以帮助企业实现远程设备的统一管理和协同办公。以下是【天联】可以应用的一些场景&#xff1a; 零售、收银软件应用统一管理&#xff1a;【天联】可以结合医药、餐饮、商超等零售业的收银软件&#xff0c;实现异地统一管理。…

OpenHarmony开发案例:【分布式遥控器】

1.概述 目前家庭电视机主要通过其自带的遥控器进行操控&#xff0c;实现的功能较为单一。例如&#xff0c;当我们要在TV端搜索节目时&#xff0c;电视机在遥控器的操控下往往只能完成一些字母或数字的输入&#xff0c;而无法输入其他复杂的内容。分布式遥控器将手机的输入能力…

解决QtCreator不能同时运行多个程序的方法

当我们运行QtCreator代码的时候&#xff0c;往往一个代码&#xff0c;可能需要打开好几个运行&#xff0c;但是会出现的情况就是&#xff0c;如果打开了一个界面&#xff0c;当我么再运行的时候&#xff0c;第一个界面就没有了&#xff0c;而且可能会出现终端报错的情况&#x…

【云计算】混合云组成、应用场景、风险挑战

《混合云》系列&#xff0c;共包含以下 3 篇文章&#xff1a; 【云计算】混合云概述【云计算】混合云分类【云计算】混合云组成、应用场景、风险挑战 &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的话&#xff0c;请给博主一个一键三连 &#x1f680;&#x1f680;&#x1f68…

Oracle 游标(光标)、抛出异常、存储过程、存储函数、触发器、视图语法及应用

游标(光标): 是用来操作查询结果集,相当于是JDBC中ResultSet 语法: cursor 游标名[(参数名 参数类型)] is 查询结果集 开发步骤: 1. 声明游标 2. 打开游标 open 游标名 3. 从游标中取数据 fetch 游标名 into 变量 …

Spectral Adversarial MixUp for Few-Shot Unsupervised Domain Adaptation论文速读

文章目录 Spectral Adversarial MixUp for Few-Shot Unsupervised Domain Adaptation摘要方法Domain-Distance-Modulated Spectral Sensitivity (DoDiSS&#xff09;模块Sensitivity-Guided Spectral Adversarial Mixup (SAMix)模块 实验结果 Spectral Adversarial MixUp for F…

上海计算机学会 2023年10月月赛 乙组T3 树的连通子图(树、树形dp)

第三题&#xff1a;T3树的连通子图 标签&#xff1a;树、树形 d p dp dp题意&#xff1a;给定一棵 n n n个结点的树&#xff0c; 1 1 1号点为这棵树的根。计算这棵树连通子图的个数&#xff0c;答案对 1 , 000 , 000 , 007 1,000,000,007 1,000,000,007取余数。题解&#xff1…

python flask 运行本地其他的python文件

在Flask中运行其他Python文件通常意味着你想在Flask应用中调用其他Python脚本或函数。这可以通过多种方式实现&#xff0c;例如使用subprocess模块、导入模块或直接调用函数。 以下是一个简单的例子&#xff0c;演示如何在Flask路由中调用另一个Python文件中的函数&#xff1a…

HTML内联框架

前言&#xff1a; 我们有时候打开网页时会有广告窗的出现&#xff0c;而这些窗口并不是来自于本站的&#xff0c;而是来自于外部网页&#xff0c;只是被引用到了自己网页中而已。这一种技术可以通过内联来实现。 标签介绍&#xff1a; HTML 内联框架元素 (<iframe>) 表示…

快速入门Spring Data JPA

Spring Data JPA是Spring Data框架的一小部分&#xff0c;它能够让开发者能够更加简单的对数据库进行增删改查。 由于Spring Data JPA可以自动生成SQL代码所以一般情况下&#xff0c;简单的增删查改就可以交给Spring Data JPA来完成&#xff0c;而复杂的动态SQL等用MyBatis来完…

设计模式---模板方法模式

一、介绍 所谓模板方法模式&#xff0c;就是提供一种方法的模板来实现一种规范&#xff0c;其他人可以利用这个模板定义自己的逻辑。 在Java编程中的应用&#xff0c;主要就是通过接口或者抽象类来实现的&#xff0c;抽象类中可以把逻辑函数声明为final类型&#xff0c;表示不能…

即插即用模块详解SCConv:用于特征冗余的空间和通道重构卷积

目录 一、摘要 二、创新点说明 2.1 Methodology 2.2SRU for Spatial Redundancy​编辑 2.3CRU for Channel Redundancy 三、实验 3.1基于CIFAR的图像分类 3.2基于ImageNet的图像分类 3.3对象检测 四、代码详解 五、总结 论文&#xff1a;https://openaccess.thecvf.c…

vue2/Vue3项目中,通过请求接口来刷新列表中的某个字段(如:Axios)

vue2/Vue3项目中&#xff0c;通过请求接口来刷新列表中的某个字段。可以使用 Vue 的异步请求库&#xff08;如 Axios&#xff09;来发送请求&#xff0c;并在请求成功后更新相应的字段。 示例如下&#xff08;Vue2&#xff09;&#xff1a; 简单的示例如下&#xff0c;假设列…

在Qt中如何简单设计一个文件和图像浏览器

文本浏览器 设计一个文本浏览器程序&#xff0c;可以打开、显示 txt、html等文件。 1.在Qt Designer中设计一个菜单其中包含打开和退出选项&#xff1a; 2. 在 QMainWindow 构造函数中把 textBrower 设为主窗口的中心部件&#xff0c;这样整个窗口就成了包含 textBrower 的单文…

jetson nx安装nomachine后无法进入linux shell

以下问题都是一个原因造成的 我在jetson nx上安装了nomachine后&#xff0c;连接时需要登陆用户名和密码&#xff0c;那这个用户名密码是什么&#xff0c;我使用系统的用户名和密码返回错误。login as a system user on this server总是failed&#xff0c;直接登录ssh输入用户…

nginx-http-flv配置

hls配置 hls配置放在 http.server里面 http {server {# HTTP监听端口listen 8002;location /hls {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}alias ./temp/hls; # HLS文件存放路径&#xff0c;请替换为你实际的路径expires -1;add_header Cache-Control no…

你的RPCvs佬的RPC

一、课程目标 了解常见系统库的hook了解frida_rpc 二、工具 教程Demo(更新)jadx-guiVS CodejebIDLE 三、课程内容 1.Hook_Libart libart.so: 在 Android 5.0&#xff08;Lollipop&#xff09;及更高版本中&#xff0c;libart.so 是 Android 运行时&#xff08;ART&#x…