python爬虫第八课:爬取深交所股票数据。

下面我们学习爬取深交所的数据。
思路如下:
1.在东方财富网上获取获取所有注册公司的编号。
2.根据公司编号构造出当天交易信息的url。
3.提取数据,保存信息。
由于股票的数据在很多网站上都有,但考虑到爬取的难易程度,所以选择在东方财富网上先找到上市公司编号,然后再到百度股票网站提取详细信息。

  • 先定义一个发送请求的函数
def get_page(url):
    try:
        r=requests.get(url,headers=headers)
        r.raise_for_status()
        r.encoding=r.apparent_encoding      
        return r.text
    except Exception as e:
        print(e)
  • 获得所有注册公司编号
    在东方财富网上找到每个上市公司的信息
    python爬虫第八课:爬取深交所股票数据。_第1张图片
    url为’http://quote.eastmoney.com/stocklist.html’
    python爬虫第八课:爬取深交所股票数据。_第2张图片
    在源码码中找到注册编码,上图画红线的部分是我们要提取的编码。
    提取公司编号的代码如下
def get_stock_list(stock_list_url):
    try:
        stock_list=[]
        page=get_page(stock_list_url)
        stocks=re.findall(r'
  • ',page,re.S) for stock in stocks: stock_list.append(stock) return stock_list except Exception as e: print(e)
    • 根据公司编号构造出百度股票的url
    stock_list_url='http://quote.eastmoney.com/stocklist.html'       
    stock_list=get_stock_list(stock_list_url,)
    for stock in stock_list:
        stock_info_url='https://gupiao.baidu.com/stock/sz'+str(stock)+'.html'
    
    def get_stock_info(url,stock):
        try:
            stock_info={}
            page=get_page(url)
            name=re.findall('(.*?)\(',page,re.S)
            name=name[0].strip()
            stock_info['stock']=name
            stock_info['num']=stock
            datas=re.findall(r'
    (.*?)
    (.*?)',page,re.S) for data in datas: key=data[0] val=data[1].strip() stock_info[key]=val with open("E:\\股票数据.txt","a",encoding="utf-8") as f: f.write(str(stock_info) + '\n') except Exception as e: print(e)
    • 主程序
    stock_list_url='http://quote.eastmoney.com/stocklist.html'       
    stock_list=get_stock_list(stock_list_url,)
    count=0
    for stock in stock_list:
        stock_info_url='https://gupiao.baidu.com/stock/sz'+str(stock)+'.html'
        get_stock_info(stock_info_url,stock)
        count=count+1
        print('\r当前进度:{:.2f}%'.format(count*100/len(stock_list)),end='')  #方便显示当前进度
    

    爬取结果
    python爬虫第八课:爬取深交所股票数据。_第5张图片
    所有代码:

    import requests
    import re
    
    headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"}
    
    def get_page(url):
        try:
            r=requests.get(url,headers=headers)
            r.raise_for_status()
            r.encoding=r.apparent_encoding      
            return r.text
        except Exception as e:
            print(e)
    
    stock_list_url='http://quote.eastmoney.com/stocklist.html'        
    
    def get_stock_list(stock_list_url):
        try:
            stock_list=[]
            page=get_page(stock_list_url)
            stocks=re.findall(r'
  • ',page,re.S) for stock in stocks: stock_list.append(stock) return stock_list except Exception as e: print(e) def get_stock_info(url,stock): try: stock_info={} page=get_page(url) name=re.findall('(.*?)\(',page,re.S) name=name[0].strip() stock_info['stock']=name stock_info['num']=stock datas=re.findall(r'
    (.*?)
    (.*?)',page,re.S) for data in datas: key=data[0] val=data[1].strip() stock_info[key]=val with open("E:\\爬虫\\@爬虫教程\\数据\\股票数据.txt","a",encoding="utf-8") as f: f.write(str(stock_info) + '\n') except Exception as e: print(e) stock_list_url='http://quote.eastmoney.com/stocklist.html' stock_list=get_stock_list(stock_list_url,) count=0 for stock in stock_list: stock_info_url='https://gupiao.baidu.com/stock/sz'+str(stock)+'.html' get_stock_info(stock_info_url,stock) count=count+1 print('\r当前进度:{:.2f}%'.format(count*100/len(stock_list)),end='')
  • 你可能感兴趣的:(爬虫)