Python爬虫学习-股票数据定向爬虫(实例)

股票数据定向爬虫

主要思路:

  1. 选取合适的股票网站进行爬取;
  2. 爬下所有的股票的编号列表;
  3. 过比较不同个股页面的网址来找到其相同点和不同点,进一步分析;
  4. 对所有的个股进行相关信息爬取。

爬虫代码

import re
import requests
from bs4 import BeautifulSoup
import bs4
# 股票代码编号信息获取
def getHTMLText(url1):
    try:
        kv = {'user-agent': 'Mozilla/4.0'}
        r=requests.get(url1,headers=kv)
        # 设置浏览器的类型,进行迷惑
        r.raise_for_status()
        # 事先获得编码,提高爬虫速度
        r.encoding='utf-8'
        # 避免r.text错误的情况发生
        if r.text=='':
            getHTMLText(url1)
        else:
            return r.text
    except:
        getHTMLText(url1)
# 爬取所有股票的编号列表
def getStockList(demo):
    soup = BeautifulSoup(demo, 'html.parser')
    a = soup('a')
    for i in a:
        try:
            href= i.attrs['href']
            # 通过正则表达式来获得需要的部分
            str1=re.findall(r'[s][hz]\d{6}',href)
            # 排除不合格的href
            if str1!=[]:
                fllist.append(re.findall(r'[s][hz]\d{6}',href))
            else:
                continue
        except:
            continue
    return fllist
# 爬取单个股票的信息
def getStockInfo(demo2,output_file,stock):
    infolist = {}
    try:
        soup = BeautifulSoup(demo2, 'html.parser')
        stocklist=soup.find("div",class_="stock-bets")
        # 获取股票名称
        name=stocklist.find(class_='bets-name')
        infolist.update({'股票名称':name.text.split()[0]})
        # 获取股票其他信息
        for dl in stocklist.descendants:
            if isinstance(dl,bs4.element.Tag):
                key=dl.find('dt')
                value=dl.find('dd')
                # 排除当key为空值
                if key!=None:
                    infolist[key.string]=value.string
        # 将股票信息放入文件中
        with open(output_file,'a',encoding='utf-8') as f:
            f.write(str(infolist) + '\n')
    except:
        # 将爬取出错的股票信息打印放入到no_do列表中
        no_do.append(stock)
# 主函数
if __name__ == '__main__':
    count=1
    no_do=[]
    fllist=[]
    # 股票列表url
    stock_list_url='http://quote.eastmoney.com/stocklist.html'
    # 文件存放地址
    output_file = 'D://pythontest/testtxt/股票信息.txt'
    # 获取到股票列表 fllist
    demo=getHTMLText(stock_list_url)
    fllist=getStockList(demo)
    #对所有的股票进行迭代
    for i in range(len(fllist)):
        count+=1
        # 百度个股信息url
        stock_info_url = "https://gupiao.baidu.com/stock/{}.html".format(str(fllist[i])[2:-2])
        demo2=getHTMLText(stock_info_url)
        # 处理和打印个股信息
        getStockInfo(demo2,output_file,fllist[i])
        # 打印出进度条
        print('\r当前进度:{:.2f}%'.format(count*100 / len(fllist)),end='')
    # 打印出异常的信息
    print(no_do)

结果显示

在这里插入图片描述

在这里插入图片描述
爬取完成。
还存在一些缺陷,部分个股信息爬取失败,暂时将爬取失败股票放在no_do中。

猜你喜欢

转载自blog.csdn.net/Bri0117/article/details/87458331