Python爬虫——爬取股票信息

1. 准备工作

每一次浏览器访问网页,会自动向浏览器服务器发送本地的电脑信息(headers),远方服务器接收到信息后会反馈给你网页信息(response),然后电脑将其解码后显示出来;

我们要做的就是向服务器发送一个虚假的头文件,骗取网页信息并提取其中有用的信息保存下来,需要的话还可以以图表的形式生动化显示这些数据;

需要用到的Python库:

import sys                            # 网页解析,获取数据
from bs4 import BeautifulSoup         # 正则表达式,进行问题匹配(提取有用信息)
import re                             # 制定URL,获取网页数据
import urllib                         # 进行excel操作
import xlwt                           # 进行SQLite数据库操作(可选)

2. 工作介绍

从网页http://www.shdjt.com/flsort.asp?lb=994420获取全部的工业互联网类股票,并分析数据;

3. 完整流程

  • 爬取网页 baseurl:http://www.shdjt.com/flsort.asp?lb=994420

    • datalist = getData(baseurl)
    • python一般用urllib获取网页信息
  • 解析数据

  • 保存数据

    • savepath = ‘.\\stock.xls’

    • saveData()

def getData(baseurl):datalist = []# python codereturn datalist
def saveData(savepath):# python code

3.1 获取网页信息

user-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36

def askURL(url):head = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36"} # head(用户代理)的作用是为了告诉服务器我们是什么机器,然后服务器就能知道我们可以接受什么样的信息;request = urllib.request.Request(url, headers=head)html = ""  # 建立一个空字符串,方便后边向里面添加内容# try和except的作用是为了让代码在遇到无法解决的问题无法进行爬虫时,可以先将该问题跳过然后运行完程序try:response = urllib.request.urlopen(request)# html = response.read().decode("utf-8") # 利用utf-8方式解码html = response.read().decode("GBK") # 有时需要不同的解码方式-GBKexcept urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return html
def getData(baseurl):datalist = []html = askURL(url)# Python codedatalist.append(html)return datalist

3.2 解析数据

def getData(baseurl):datalist = []   # 新建空列表用于保存爬取的数据html = askURL(url)# 逐一解析数据soup = BeautifulSoup(html, "html.parser")  ## 将获取的html文件用BeautifulSoup读取出来for item in soup.find_all('tr',height="25"):  ## 查找符合要求的字符串,形成列表# print(item)data = []  # 保存一个股票的全部信息item = str(item)# 通过正则表达式的方式来查找指定的字符串name = re.findall(findName, item) # 爬取名字,findName函数在后面,在这里只需要知道他可以爬取到名字# print(name)                     # 输出看效果if len(name) != 0:                # 找到爬取到的非空数据datalist.append(name)             # 将非空数据添加到datalist列表中,余同type = re.findall(findType, item)# print(type)if len(type) != 0:datalist.append(type)normal_data = re.findall(findData, item) if len(normal_data) != 0:del normal_data[2]          # 删除其中的无用信息del normal_data[2]datalist.append(normal_data)# print(normal_data_list)# 一下内容是具体事件具体分析,根据不同的输出datalist调整,使得最后能得到自己想要的listdatalist = datalist[3:]              # 在列表中第3个元素以后才是我们需要的stock_data = []                      for i in range(0, len(datalist), 3):data = datalist[i:i + 3]         # 在datalist的数据每3个元素(股票名称,股票类型,各种数据)一组重新保存for i in data[2]:                # 将列表中内嵌的列表元素展开data.append(i)del data[2]data[0], data[2] = data[2], data[0]   # 交换0号位置与2号位置的元素stock_data.append(data)print(stock_data)return stock_datareturn stock_data                      # 将stock_data返回

html代码,根据改代码写出正则项,以爬取想要的信息:只需要找到你想要信息所在位置,然后将其与其上下文复制到内置函数re.compile中,再将我们需要的内容替换为(.*?),该函数就可以自动上下文找到我们需要的信息,并保存下来。具体实现请看html后跟的python代码。

<tr height="25">
<td>2</td>
<td>600418</td>
<td class="tdred"><a class="ared" href="gpdm.asp?gpdm=600418" target="_blank">江淮汽车</a> <a class="ahs3" href="http://qgqp.shdjt.com/gpdm.asp?gpdm=600418" target="_blank">点评</a></td>
<td><font color="#808080">汽车制造</font></td>
<td>10.99</td>
<td class="tdred">10.01%</td>
<td>208</td>
<td>368</td>
<td>118.79</td>
<td>115.36</td>
<td class="tdred">19898</td>
<td class="tdred">.99</td>
<td class="tdred">1.03</td>
<td class="tdred">22.99</td>
<td>12.64</td>
<td>10.9</td>
<td>1</td>
<td>1</td>
<td>11.1</td>
<td>-.2</td>
<td>-4.8</td>
<td class="tdred">-6.1</td>
<td>98</td>
<td>1.27</td>
<td>26.4</td>
<td>15.3</td>
<td>28.1</td>
<td>28.3</td>
<td>25.6</td>
<td>30.4</td>
<td>19.9</td>
<td>26.0</td>
<td>9.12</td>
<td>1.04</td>
</tr>
# 利用正则表达式在上面的html文件中寻找各种数据findName = re.compile(r'target="_blank">(.*?)</a>.*class=')  # r的作用是为了让后面的转义字符失效
findType = re.compile(r'<td><font color="#808080">(.*?)</font>', re.s)   #re.s让换行符保存在提取的信息中
findData = re.compile(r'>(.*)</td>')
# datalist只包括name部分
[['华自科技'], ['江淮汽车'], ['工业富联'], ['启明信息'], ['赛意信息'], ['南都电源'], ['科创信息'], ['龙星化工'], ['神州泰岳'], ['拓斯达'], ['横店东磁'], ['天源迪科'], ['南京熊猫'], ['安控科技'], ['维宏股份'], ['金现代'], ['剑桥科技'], ['用友网络'], ['埃夫特-U'], ['宜通世纪'], ['*ST沈机'], ['汉钟精机'], ['川仪股份'], ['三丰智能'], ['传化智联'], ['兴瑞科技'], ['东方国信'], ['海得控制'], ['盈趣科技'], ['金自天正'], ['长飞光纤'], ['森霸传感'], ['安恒信息'], ['宝信软件'], ['众业达'], ['亚威股份'], ['拓邦股份'], ['柯力传感'], ['汉威科技'], ['云涌科技'], ['赛摩智能'], ['英威腾'], ['海尔智家'], ['黄河旋风'], ['荣联科技'], ['光环新网'], ['佳讯飞鸿'], ['华胜天成'], ['宇晶股份'], ['汉得信息'], ['润建股份'], ['鼎捷软件'], ['华中数控'], ['风华高科'], ['瑞斯康达'], ['浪潮信息'], ['冰山冷热'], ['今天国际'], ['东土科技'], ['金奥博'], ['启明星辰'], ['远光软件'], ['柳工'], ['德恩精工'], ['三一重工'], ['美的集团'], ['有方科技'], ['天玑科技'], ['天奇股份'], ['旋极信息'], ['万讯自控'], ['日海智能'], ['徐工机械'], ['映翰通'], ['智光电气'], ['中联重科']]

3.3 保存数据

# 保存数据
def saveData(datalist, savepath):print("Save.......")book = xlwt.Workbook(encoding='utf-8', style_compression=0)  # 创建workbook对象sheet = book.add_sheet('stock', cell_overwrite_ok=True)  # 创建工作表col = ("序号","行业","股票名称","股票代码","最新价格","涨幅","市值/亿元","市盈率","涨幅/3日%","涨幅/半年","净额/万元","ddx","ddy","ddz","主动率","通吃率","ddx红/次","ddx红/连","特大差","大单差","中单差","小单差","活跃度","单数比","特大买入","特大卖出","大单买入","大单卖出","中单买入","中单卖出","小单买入","小单卖出","换手率","量比")for i in range(0,34):sheet.write(0, i, col[i])for i in range(0,76):print("第%d条"%(i+1))data = datalist[i]for j in range(0,34):sheet.write(i+1,j,data[j])book.save('stock.xls')  # 保存文件

3.4 运行主函数

if __name__ == "__main__":main()print("finished")def main():baseurl = "http://www.shdjt.com/flsort.asp?lb=994420"#爬取网页stock_data = getData(baseurl)savepath = "stock.xls"# 保存数据saveData(stock_data, savepath)

4. 结果

参考视频:https://www.bilibili.com/video/BV12E411A7ZQ?from=search&seid=13553029208537153694

Python爬虫——爬取股票信息相关推荐

  1. Python爬虫——爬取股票信息生成csv文件

    最近在学习数据分析,就想着弄一份csv文件练手用,于是就爬取了股票信息,生成csv文件 爬取的网址:http://quote.eastmoney.com/ztb/detail#type=ztgc 网址 ...

  2. 在当当买了python怎么下载源代码-python爬虫爬取当当网

    [实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...

  3. python爬虫代码实例-Python爬虫爬取百度搜索内容代码实例

    这篇文章主要介绍了Python爬虫爬取百度搜索内容代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 搜索引擎用的很频繁,现在利用Python爬 ...

  4. python爬虫数据分析可以做什么-python爬虫爬取的数据可以做什么

    在Python中连接到多播服务器问题,怎么解决你把redirect关闭就可以了.在send时,加上参数allow_redirects=False 通常每个浏览器都会设置redirect的次数.如果re ...

  5. python爬虫爬取csdn博客专家所有博客内容

    python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 #coding:utf-8import urlli ...

  6. python网易云_用python爬虫爬取网易云音乐

    标签: 使用python爬虫爬取网易云音乐 需要使用的模块 只需要requests模块和os模块即可 开始工作 先去网易云音乐网页版找一下你想要听的歌曲点击进去.按键盘F12打开网页调试工具,点击Ne ...

  7. 使用Python爬虫爬取网络美女图片

    代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...

  8. python如何爬取网站所有目录_用python爬虫爬取网站的章节目录及其网址

    认识爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟 ...

  9. 运用Python爬虫爬取一个美女网址,爬取美女图

    运用Python爬虫爬取一个美女网址,爬取美女图 要运用到的python技术: 导入库 1.request 发送请求,从服务器获取数据 2.BeautifulSoup 用来解析整个网页的源代码 imp ...

最新文章

  1. 什么是随机存取与顺序存取?
  2. mysql replace语句
  3. LINUX 上的 Shebang 符号(#!)
  4. 读懂这篇文章就懂大数据,3000字概括《大数据时代》
  5. FZU - 2202 犯罪嫌疑人(逻辑思维+简单模拟)
  6. 设计模式-Factory Method Pattern
  7. 后端返回number类型数据_Javascript基础教程之数据类型 (数值 Number)
  8. python网站框架下载_web.py首页、文档和下载 - Python框架 - OSCHINA - 中文开源技术交流社区...
  9. php 前端模板 yii,php – Yii2高级模板:添加独立网页
  10. SpringCloud介绍(一)
  11. C++数据结构——array、vector、链表
  12. python如何用requests传送json格式数据
  13. 你好,Wi-Fi 6
  14. wps改照片底色有红边_Excel怎么给证件照换底色?Excel中快速将证件照蓝底换红底的方法介绍...
  15. codeup21158 循环比赛日程表
  16. 渐变色按钮功能按钮绘制C语言示例
  17. 微信小程序——消息推送配置
  18. 360校园招聘2015届技术类笔试题
  19. [4G5G专题-31]:物理层-物理信道、信号、映射概述
  20. NOI.5.37雇佣兵

热门文章

  1. MSI BIOS更新迷惑行为
  2. 求ax^2+bx+c=0(ao)根的c语言程序,【C语言】求方程ax^2+bx+c=0的根
  3. 页面title加icon
  4. js实现自定义title提示效果
  5. 长期不能落地的区块链突破口在这里
  6. centos mysql安装mysql-devel报错
  7. Ubuntu安装新的无线网卡驱动rtl88x2bu出现问题
  8. torch学习 (三十二):周杰伦歌词数据集与长短期记忆 (LSTM)
  9. Windows版微信加密存储图片的解密工具GUI程序
  10. 解决RStudio Warning message:文件名、目录名或卷标语法不正确