python爬取股票图_python 股票数据爬取(两种方法)
股票HTML网页分析:
东方财富网可以看到股票信息:
http://quote.eastmoney.com/stocklist.html
查看源代码:
R001(201008)R004(201010)RC001(202001)
可以在href中提取股票的代码,
想了解股票的具体信息,需要去百度股票查找,方法为:
'https://gupiao.baidu.com/stock/股票代码.html
查看具体股票的源代码:
国祯环保 (300388)
已休市 2017-09-29 15:00:03
--
--
--
- 今开
- 19.92
- 成交量
- 8917手
- 最高
- 20.15
- 涨停
- 21.96
- 内盘
- 4974手
- 成交额
- 1786.10万
- 委比
- -50.69%
- 流通市值
- 59.98亿
- 市盈率MRQ
- 50.59
- 每股收益
- 0.20
- 总股本
- 3.06亿
- 昨收
- 19.96
- 换手率
- 0.30%
- 最低
- 19.92
- 跌停
-
17.96
- 外盘
- 3943手
- 振幅
- 1.15%
- 量比
- 0.11
- 总市值
- 61.35亿
- 市净率
- 3.91
- 每股净资产
- 5.14
- 流通股本
- 2.99亿
发现股票名称在class="bets-name"的a标签中,其他的数据都在dt和dd标签中
方法一:采用bs4库和正则表达式
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 = code
return r.text
except:
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:
continue
def getStockInformation(detailUrl, outputFile, stockList):
count = 0
for name in stockList:
count = count + 1
stockUrl = detailUrl + name + '.html'
html = getHTMLText(stockUrl)
try:
if html == "":
continue
stockDict = {}
soup = BeautifulSoup(html, 'html.parser')
stockinfo = soup.find('div', attrs={'class': 'stock-bets'})
stockname = stockinfo.find('a', attrs={'class': 'bets-name'})
# 当标签内部还有标签时,利用text可以得到正确的文字,利用string可能会产生None
stockDict["股票名称"] = 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='')
continue
def 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()可以提取标签元素为字符串从而实现匹配正则表达式的处理
正则表达式详解:
国祯环保 (300388)
re.findall('.*\(', stockname)[0].split()[0] + '('+re.findall('\>.*\
匹配结果:国祯环保(300388)
因为'('为正则表达式语法里的基本符号,所以需要转义
正则表达式从每行开始匹配,匹配之后返回[' 国祯环保 ('],采用split将空白字符分割,返回['国祯环保',‘(’]
# -*- coding: utf-8 -*-
import scrapy
import re
class 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=0
for href in response.css('a').extract():
try:
if count == 300:
break
count=count+1
stockname=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:
continue
pass
def 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('\>.*\
for i in range(len(keyList)):
stockkey=re.findall(r'>.*',keyList[i])[0][1:-5]
stockvalue=re.findall(r'>.*',valueList[i])[0][1:-5]
stockDict[stockkey]=stockvalue
yield 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.html
class BaidustocksPipeline(object):
def process_item(self, item, spider):
return item
class 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:
pass
return item
此时要修改配置文件setting.py文件
ITEM_PIPELINES = {
'BaiduStocks.pipelines.BaidustocksinfoPipeline': 300,
}
(4)运行爬虫:scrapy crawl stocks
python爬取股票图_python 股票数据爬取(两种方法)相关推荐
- python右对齐格式化输出_Python中格式化输出的两种方法介绍
本篇文章给大家带来的内容是关于Python中格式化输出的两种方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 方式一:使用占位符 % 常用占位符:% s (s = string ...
- python求列表的中位数_python中获取中位数的两种方法
普通方法: 对列表进行排序,然后根据长度为奇数或者偶数的不同情况计算中位数 def huahua(x): length = len(x) print(length) x.sort() print(x) ...
- python csv合并单元格_python中合并表格的两种方法
合并表格要注意的是设置表格的表头,也就是是将表格第一列设置为合并表格的索引,这样合并表格的时候就会合并两个表格第一列的元素相同的行. 方法一:使用join合并import numpy as np im ...
- python numpy读取数据_大神教你python 读取文件并把矩阵转成numpy的两种方法
导读 今天小编就为大家分享一篇python 读取文件并把矩阵转成numpy的两种方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 在当前目录下: 方法1: file = open( ...
- python大神读取_大神教你python 读取文件并把矩阵转成numpy的两种方法
导读 今天小编就为大家分享一篇python 读取文件并把矩阵转成numpy的两种方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 在当前目录下: 方法1: file = open( ...
- 数据增加的两种方法(二)
数据增加的两种方法(二) 开发工具与关键技术:SQL Server 2014.数据增加的两种方法(二) 作者:袁何恩 撰写时间:2019年7月26日 今天,我要和大家分享的技术是新增数据的两种方法. ...
- Python进阶之使用Scrapy实现自动登录Github的两种方法(POST,FormRequest,from_response)
Python进阶之使用Scrapy实现自动登录Github的两种方法 1. 通过.FormRequest()实现登录github github1.py 2. 通过.FormRequest.from_r ...
- WPF中在XAML中实现数据类型转换的两种方法
WPF中在XAML中实现数据类型转换的两种方法 原文:WPF中在XAML中实现数据类型转换的两种方法 熟悉数据绑定的朋友都知道,当我们在Model中获取一个对象的数据,常常需要对其进行数据转换后显示在 ...
- 怎么在python中添加文字_Python在图片中添加文字的两种方法
本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...
- python对列表进行去重_Python对列表去重的4种方法
开发中对数组.列表去重是非常常见的需求,对一个list中的id进行去重,有下面几种方法,前面两种方法不能保证顺序, 后面两种方法可以保持原来的顺序. 下面的代码都在Python3下测试通过, Pyth ...
最新文章
- html脚本语言居中,web前端:CSS--几种常用的水平垂直居中对齐方法
- MySql中当in或or参数过多时导致索引失效
- Qt5 常见的控件类关系
- linux ssh和scp,Linux SSH 与 SCP命令简述
- linux java的启动内存溢出,java - Java的R代码可在Linux上运行,但不能在Windows中运行 - 堆栈内存溢出...
- 网上书店模板asp与html,一个简单的网上书城的例子(三)_asp实例
- ubuntu 安装 pycharm
- 【147天】尚学堂高淇Java300集视频精华笔记(108-109)
- 高清接口芯片---gv7600、sii9135
- 《Servlet和JSP学习指南》一导读
- NBIA Data Retriever(NBIA数据下载工具)使用
- python基本运算符
- python连接数据库--查询数据
- 【从C到C++学习笔记】域运算符/new/delete运算符/重载/Name managling/extern C/带函数默认值参数
- cmd批量修改文件名 增加文字_[Windows应用技巧][cmd篇][批量更改文件名]
- php字符串去重和去空,php去空格
- [分析力学]解题思路 - 最小作用量原理
- Win10安装-我们无法创建新的分区,也找不到现有的分区
- 无法设置默认打开方式怎么办
- 怎么把桌面计算机的快捷,教你在电脑桌面如何设置“一键关机”快捷图标的教程...