使用python爬虫爬取股票数据

摘要:
前言:编写一个爬虫脚本,用于爬取东方财富网的上海股票代码,并通过爬取百度股票的单个股票数据,将所有上海股票数据爬取下来并保存到本地文件中系统环境:64位win10系统,64位python3.6,IDE位pycharm预备知识:BeautifulSoup的基本知识,re正则表达式的基本知识代码:importrequestsfrombs4importBeautifulSoupimporttraceba

前言:

编写一个爬虫脚本,用于爬取东方财富网的上海股票代码,并通过爬取百度股票的单个股票数据,将所有上海股票数据爬取下来并保存到本地文件中

系统环境:

64位win10系统,64位python3.6,IDE位pycharm

预备知识:

BeautifulSoup的基本知识,re正则表达式的基本知识

代码:

importrequests
from bs4 importBeautifulSoup
importtraceback
importre
defgetHTMLText(url):
    try:
        user_agent = '自己的浏览器头部信息'headers = {'User-Agent': user_agent}
        r = requests.get(url,headers = headers,timeout = 30)
        r.raise_for_status()
        r.encoding =r.apparent_encoding
        returnr.text
    except: 
        return ""

defgetStockList(lst,stock_list_url):
    html =getHTMLText(stock_list_url)
    soup = BeautifulSoup(html,'html.parser')
    a = soup.find_all('a')
    for i ina:
        try:
            href = i.attrs['href']
            lst.append(re.findall(r"shd{6}",href)[0])
            #print(lst)
        except:
            continue

defgetStockInfo(lst,stock_info_url,fpath):
    for stock inlst:
        url = stock_info_url + stock + '.html'html =getHTMLText(url)
        try:
            if html =="":
                continueinfoDict ={ }
            soup = BeautifulSoup(html,'html.parser')
            stockInfo = soup.find('div',attrs = {'class':'stock-bets'})
            if stockInfo ==None:
                continue
            #print(stockInfo)
            name = stockInfo.find_all(attrs={'class':'bets-name'})[0]
            #print(name)
            infoDict.update({'股票名称': name.text.split()[0]})

            keyList = stockInfo.find_all('dt')
            valueList = stockInfo.find_all('dd')
            for i inrange(len(keyList)):
            
                key =keyList[i].text
                val =valueList[i].text
                infoDict[key] =val
            with open(fpath,'a',encoding = 'utf-8') as f:
                f.write(str(infoDict) + '')
        except:
            traceback.print_exc()
            continue
            


defmain():
    stock_list_url = 'http://quote.eastmoney.com/stocklist.html'stock_info_url = 'http://gupiao.baidu.com/stock/'output_file = 'D://Postgraduate//Python//python项目//Python网络爬虫与信息提取-中国大学MOOC//3 网络爬虫之实战//BaiduStockInfo.txt'slist =[]
    getStockList(slist,stock_list_url)
    getStockInfo(slist,stock_info_url,output_file)



main()
    

代码解释:

第一个getHTMLText函数的作用是获得所需的网页源代码
第二个getStockList函数的作用是获得东方财富网上面上海股票的全部代码,查看网页源代码可知,股票代码的数据放在'a'标签里面,如下图所示:
使用python爬虫爬取股票数据第1张
因此,首先用find_all方法遍历所有'a'标签,然后在'a'标签里面提取出href部分信息,在提取出来的href信息里面,用正则表达式匹配所需的信息,“shd{6}”,即徐亚匹配例如sh200010的信息
第三个函数需要根据第二个函数得到的股票代码,拼接出一个url,在这个特定的url的网页里,使用第一个函数解析网页,首先加一个判断,如果遇到html为空,那么要继续执行下去,同样,我们也需要再加一个判断(关键之处),遇到网页不存在,
但html源代码仍然是存在的,因此接下去这个命令
stockInfo = soup.find('div',attrs = {'class':'stock-bets'})

可能为空,如果不加判断,程序执行到这里就会报错而无法继续执行,因此添加:

if stockInfo ==None:
    continue

免责声明:文章转载自《使用python爬虫爬取股票数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UI线程异常处理方法Django实现支付宝付款和微信支付下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python 面向对象

概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处。 1 2 3 4 5 6 7 8...

【zabbix监控+python爬虫+shell脚本】 理财对接天天基金网实现相关基金波动邮件/钉钉提醒

前序 刚开始接触理财, 第一次朋友介绍的是[安信证券]这款app, 看了几天, 以每笔500的价格入手了两个基金玩玩接触一下行情, 后来发现, 每次都不知道它什么时候更新这个变动净值参数,每次都要自己去搜索, 或者又要登录一遍去看盈亏, 够懒吧, 嘿嘿, 后来突发奇想, 跟朋友了解一下是不是有什么公式能计算得到相关的净值参数的, 于是翻了一遍, 发现对[天...

Python源代码安全审计工具之Bandit

Bandit是一种旨在查找Python代码中常见安全问题的工具。 它处理每个文件 从中构建AST 然后针对AST节点运行适当的插件。 当它扫描完成所有文件之后将生成报告。 以下安装部署过程基于Windows操作系统,假设已经安装并设置好了以下软件。 "Python 3.7.8 AMD64" "64-bit Git for Windows" 最便捷的安装方式...

python学习笔记十七:base64及md5编码

一、Python Base64编码Python中进行Base64编码和解码要用base64模块,代码示例: #-*- coding: utf-8 -*- import base64 str = 'cnblogs' str64 = base64.b64encode(str) print str64 #Y25ibG9n...

Python札记 -- 文件压缩

在日常工作当中免不了要对文件进行压缩,Python标准库里也提供了实现压缩功能的模块。 一、简单的例子 首先了解一下压缩单个文件在Python中怎么实现。竹风建了个测试文件夹zip_text,里面有test.apk和zip_model_test.py两个文件。如下图所示: 目标是将test.apk打包成test.zip。编写如下代码: 1 #!/usr/b...

scrapyd-deploy 把scrapy项目打包上传部署到scrapyd服务端报错 Deploy failed (500)

Outline 在把scrapy任务部署到scrapyd服务上时,遇到问题一直不成功: 报错如下: (Deploy failed (500):,部署失败) scrapyd-deploy muji_data_python_spider -p muji_data_python_spider Packing version 1617328541 scrapyd...