爬取东方财富股票代码

2024-04-17 03:36

本文主要是介绍爬取东方财富股票代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们打开东方财富网站: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.chinasem.cn/article/910691

相关文章

Scrapy实战-爬取豆瓣漫画

背景知识 (一)什么是Scrapy呢?Python上优秀的爬虫框架。什么是爬虫?可以看我的心得感悟,也可以自行谷歌百度。 (二)建议看下初识Scrapy的事前准备安装Scrapy。 (三)Selectors根据XPath和CSS表达式从网页中选择数据。XPath和CSS表达式是什么东西,我们不用太过于纠结,只需要知道可以使用它们在网页中选择数据。用法:利用chrome去复制所需数据的位置信息

转:网页爬取页面去重策略

网上搜集到的网页去重策略: 1.通过MD5生成电子指纹来判断页面是否改变 2.nutch去重策略: nutch中digest是对采集的每一个网页内容的32位哈希值,如果两个网页内容完全一样,它们的digest值肯定会一样,但哪怕其中之一多或少一个空格,它们的digest值就会不一样。所以,我认为,用digest做id是一个非常不错的选择。     如果nutch在两次不同的时间抓某个

python实战(爬取一个小说网站,将爬取的文本转换为语音)

1.前言 有声小说相信大家都不陌生了, 里面的音频基本都是一些声优录制的 其实除了录制音频, 咱们可以利用百度免费的api接口使用python语言在线合成语音 制作属于自己的有声小说, 一睹为快吧!! 2.爬取小说网站 爬取的网站http://www.xbiquge.la/10/10489/ 代码示例: # -*- coding: utf-8 -*-# @File : 爬取文本内容

python-爬虫篇-爬取百度贴吧,段友之家的图片和视频

#!/usr/bin/env python# -*- coding: utf-8 -*-"""爬取百度贴吧,段友之家的图片和视频author: cuizytime:2018-05-19"""import requestsimport bs4import osdef write_file(file_url, file_type):"""写入文件"""res = requests.

Scrapy爬虫爬取天气数据存储为txt和json等多种格式

一、创建Scrrapy项目 scrapy startproject weather      二、 创建爬虫文件 scrapy genspider wuhanSpider wuhan.tianqi.com     三、SCrapy项目各个文件    (1) items.py import scrapyclass WeatherItem(scrapy.Item):#

python爬取飞卢小说网免费小说

python爬取飞卢小说网免费小说 一、爬取流程介绍二、完整代码 一、爬取流程介绍 首先看一下我们需要爬取的飞卢小说网的免费小说《全民:开局邀请光头强挑战只狼》网址,如下图所示: 点击第一章,按F12键打开浏览器开发者工具,再点击开发者工具左上角的小箭头,找到小说内容在网页中所在的位置,如下图所示: 可以看到,在具体的章节中,小说内容均在一个class="noveConten

JavaSE 利用正则表达式进行本地和网络爬取数据(爬虫)

爬虫 正则表达式的作用 作用1:校验字符串是满足规则 作用2:在一段文本中查找满足需要的内容 本地爬虫和网络爬虫 Pattern类 表示正则表达式 Matter类 文本编译器,作用按照正则表达式的规则去读取字符串,从头开始读取,在大串中去找符合匹配规则的子串 方法底层会根据find方法记录的索引进行字符串的截取 subString(起始索引,结束索引) 包头不包尾 爬取第一

小说爬虫-01爬取总排行榜 分页翻页 Scrapy SQLite SQL 简单上手!

代码仓库 代码实现部分很简单! 为了大家方便,代码我已经全部都上传到了 GitHub,希望大家可以点个Start! https://github.com/turbo-duck/biquge_fiction_spider 背景信息 我们计划对笔趣阁网站的小说进行爬取。我们通过小说的排行榜对整个网站的所有小说进行爬取。 https://www.xbiqugew.com/top/allvi

Python11 使用爬虫实现图书250排行榜信息爬取

1.什么是网络爬虫 Python爬虫是使用Python编程语言编写的程序,它能自动从互联网上抓取数据。这类程序一般利用网络请求来访问网站,解析网站的HTML或其他格式的内容,提取出有用的数据,有时还会进行后续的数据处理或存储。 Python爬虫的用途包括: 数据收集:对于数据分析师和研究人员来说,爬虫可以帮助从各种网站上自动化收集数据,如社交媒体数据、金融市场数据、商品信息等。

利用Python爬取天气数据并实现数据可视化,一个完整的Python项目案例讲解

要使用Python爬取天气数据并进行制图分析分几个步骤进行: 选择数据源:首先,你需要找到一个提供天气数据的API或网站。一些常见的选择包括:OpenWeatherMap、Weatherbit、Weather Underground等。 安装必要的库:你需要安装requests库来发送HTTP请求,以及matplotlib或seaborn等库来制图。如果你选择使用pandas来处理数