使用request+bs4爬取所有股票信息

爬取前戏

我们要知道利用selenium是非常无敌的,自我认为什么反爬不反爬都不在话下,但是今天我们为什么要用request+bs4爬取所有股票信息呢?因为他比较原始,因此今天的数据,爬取起来也是比较繁琐的!接下来让我们emmmm。。。。你懂得

爬取步骤

第一步:获取股票代码

1)我们通过这个链接去网易看一下具体的股票信息,下面这个网页是乐视网的股票信息http://quotes.money.163.com/trade/lsjysj_300104.html#01b07

2)上海证券交易所的官方网站上直接告诉你了所有股票的代码,请点击市场数据---股票列表---下载---整理为csv文件(这样你就拿到了3000多个股票代码)

第二步:处理一些乱糟糟的数据,这些数据要在网页上面找。将数据下载下来,存储为csv文件。

[注意]:为什么要异常处理?

? 因为有些股票代码里面没有数据,也可能是空的,总之在下载的时候,由于股票代码,就会出现一系列的问题,所以对他异常处理

'''处理不规整数据'''
# http://quotes.money.163.com/trade/lsjysj_300104.html#01b07    #30010就是一个公司的股票代码
import pandas as pd
import requests
from bs4 import BeautifulSoup

log = open("error.log", mode="w", encoding="utf-8")  #这是一个错误日志,打开它,把错误的记录填进去
df = pd.read_csv("code.csv")
for code in df['code']:  #遍历code
    try:

        # 000539
        # 000001  1
        code = format(code, "06")  # 进行格式化处理. 处理成6位的字符串  000001
        url = f"http://quotes.money.163.com/trade/lsjysj_{code}.html#01b07"
        # 发送请求
        resp = requests.get(url)  # 发送请求. 获取到数据
        main_page = BeautifulSoup(resp.text, "html.parser")  # 解析这个网页, 告诉它这个网页是html
        main_page.find()  # 找一个
        main_page.find_all()  # 找一堆
        trs = main_page.find("form", attrs={"name": "tradeData"}).find_all("table")[1].find_all("tr") # <form name="tradeData">  #打开网页,找到网页的一个唯一属性
        #这些就是网页的信息,我们对他进行处理就好
        start = trs[0].find_all("input")[2].get("value").replace("-", "")  #开始上市时间
        end = trs[1].find_all("input")[2].get("value").replace("-", "")   #今日
        href = main_page.find("ul", attrs={"class": 'main_menu'}).find_all("li")[0].find("a").get('href')
        # print(href) # /0600000.html#01a01
        code_num = href.split(".")[0].strip("/")  #对上面的字符串进行切片处理

        download_url = f"http://quotes.money.163.com/service/chddata.html?code={code_num}&start={start}&end={end}&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP"
        #获取到整个完整的访问股票代码的网址。

        resp = requests.get(download_url)
        resp.encoding = "GBK"   #编码问题

        file_name = main_page.find("h1", attrs={"class":"title_01"}).text.replace(" ", "")
        with open(f"股票交易记录/{file_name}.csv", mode="w", encoding="UTF-8") as f:
            f.write(resp.text)
        print("下载了一个")
    except Exception as e:
        log.write(f"下载{code}股票的时候. 出现了错误. url是:{url} download:{download_url} \n ")

上面这样,我们的每个股票的详细信息就会下载到文件中。

第三步:将数据进行可视化操作,将收盘价,开盘价等数据,用一定的图片显示出来。

import pandas as pd
import matplotlib.pyplot as plt
import mpl_finance as mpl
from matplotlib.pylab import date2num

def main():
    main_df = pd.read_csv('目录.csv', dtype=object)  # 如果不写后面的dtype, 你读取的code就是数值 int, 此时默认是字符串
    while 1:
        code = input("请输入一个你想看到的股票代码(6位):")  # 00001
        if len(code) != 6:
            print("代码不对. 请重新输入!")
        else:
            data_df = main_df[main_df['code']==code]
            # 600006,东风汽车(600006)历史交易数据.csv
            if data_df.empty:
                print("没有这支股票")
            else:
                print("有这支股票")
                file_name = data_df.iloc[0]['file']
                show(file_name, code)

def show(file_name, code): # 显示这个股票的历史记录
    data_df = pd.read_csv(f"股票所有记录/{file_name}", parse_dates=["日期"]).iloc[:100, :]
    data_df = data_df[data_df['开盘价' != 0.0]]
    k_data = data_df[["日期", "开盘价", "最高价", "最低价", "收盘价"]]
    k_data['日期'] = date2num(k_data['日期'])
    # time, open, high, low, close
    #  [(time, open, high, low, close), (time, open, high, low, close), (time, open, high, low, close), ()]
    # gen = [tuple(value) for value in k_data.values]  # 1
    gen = (tuple(value) for value in k_data.values)  # 2

    fig, [ax1, ax2] = plt.subplots(2, 1, sharex=True)

    ax2.bar(date2num(data_df['日期']), data_df['成交金额'])
    ax1.xaxis_date()  #x轴
    ax2.xaxis_date()

    mpl.candlestick_ohlc(ax1, gen)
    plt.savefig("abc.jpg", dpi=1000)
    plt.show()

if __name__ == '__main__':
    main()

有没有发现这张图好丑,好吧!没关系的,基本实现了哈哈。

原文地址:https://www.cnblogs.com/yanjiayi098-001/p/11707115.html

时间: 2024-08-30 09:51:54

使用request+bs4爬取所有股票信息的相关文章

使用request+Beautiful爬取妹子图

一.request安装 pip install requests request使用示例 import requests response = requests.get('https://www.mzitu.com/') # get()方法发送请求,获取HTML网页 response.status_code # 返回状态码 response.text #以文本格式返回网页内容 response.content # 以二进制形式返回 二.BeautifulSoup库 BeautifulSoup是P

BS4爬取物价局房产备案价以及dataframe的操作来获取房价的信息分析

因为最近要买房子,然后对房市做了一些调研,发现套路极多.卖房子的顾问目前基本都是一派胡言能忽悠就忽悠,所以基本他们的话是不能信的.一个楼盘一次开盘基本上都是200-300套房子,数据量虽然不大,但是其实看一下也很烦要一页一页的翻,如果是在纸上的话,他们还不让你给带回去.所以就是在选一个价格楼层也合适的房子,基本上很不方便.但是幸运的是,合肥市的房子的所有的价格都在合肥是物价局上面公示出来了.所以这里考虑的就是先把房子的价格数据都给爬下来,然后分析房子的单价,总价来选个觉得最适合自己的房源. 这里

针对源代码和检查元素不一致的网页爬虫——利用Selenium、PhantomJS、bs4爬取12306的列车途径站信息

整个程序的核心难点在于上次豆瓣爬虫针对的是静态网页,源代码和检查元素内容相同:而在12306的查找搜索过程中,其网页发生变化(出现了查找到的数据),这个过程是动态的,使得我们在审查元素中能一一对应看到的表格数据没有显示在源代码中.这也是这次12306爬虫和上次豆瓣书单爬虫的最大不同点. 查找相关资料,我选择使用Selenium的PhantomJS模拟浏览器爬取源代码,这样获取到的datas包含了我需要的(查找搜索出的)途径站数据. 暂时把整个程序分为了这几个部分:(1)提取列车Code和No信息

python爬虫中文乱码问题(request方式爬取)

https://blog.csdn.net/guoxinian/article/details/83047746 req = requests.get(url)返回的是类对象 其包括的属性有: req.encoding:返回编码方式 req.text:text返回的是处理过的Unicode型的数据 req.content:content返回的是bytes型的原始数据 content是把内容bytes返回. 而text是decode成Unicode. 如果headers没有charset字符集的化

【爬虫】使用urllib.request去爬取小说

import urllib.request import re #1获取主页源代码 #2获取章节超链接 #3获取章节内容 #4下载小说 #驼峰命名法 #注释 获取小说内容 def getNovelContent(): #获取源代码 HTTP Response对象 html = urllib.request.urlopen('http://www.quanshuwang.com/book/0/269/') html = html.read() #print(html) #设置编码 html = h

利用bs4爬取三国演义所有章节标题以及章节内容

url = ' http://www.shicimingju.com/book/sanguoyanyi.html' from bs4 import BeautifulSoup import requests url = 'http://www.shicimingju.com/book/sanguoyanyi.html' headers = { 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWe

python爬取手机归属地

用python+bs4爬取了手机归属地数据: import urllib.request from bs4 import BeautifulSoup def spider1(url): headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 'Accept':'text/html;q=0.9,*/

爬虫系列之股票信息爬取

1. 总述 慕课中这段代码的功能是首先从东方财富网上获得所有股票的代码,再利用我们所获得的股票代码输入url中进入百度股票页面爬取该只股票的详细信息. 1 import requests 2 from bs4 import BeautifulSoup 3 import traceback 4 import re 5 6 7 def getHTMLText(url): 8 try: 9 r = requests.get(url) 10 r.raise_for_status() 11 r.encod

爬虫入门之爬取策略 XPath与bs4实现(五)

爬虫入门之爬取策略 XPath与bs4实现(五) 在爬虫系统中,待抓取URL队列是很重要的一部分.待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面.而决定这些URL排列顺序的方法,叫做抓取策略.下面重点介绍几种常见的抓取策略: 1 深度优先遍历策略: 深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接.我们以下面的图为例:遍历的路径:A-F-G E-H-I B C D