爬虫练习(二)-股票信息抓取

思路:
1、首先需要找到一个将股票信息存放在html上的股票网站
2、因为每一个股票都是一个独立的页面,所以在抓取时,首先要了解每个股票网址的规律(网址最后结尾都是股票的代码)
3、先要找到所有股票代码,从东方财富网股票列表处来获取所有股票的代码
4、在一个个打开,获取信息

代码框架:
1、抓取页面的函数

import re
from bs4 import BeautifulSoup
import requests as rs
import traceback as tb

#1、抓取函数
def getContent(url):
    try:
        r = rs.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print('爬取失败')

2、获取存放着所有股票代码的列表

def producer(stock_url,info_list):
    html = getContent(stock_url) #获取股票列表页面
    soup = BeautifulSoup(html,'html.parser')
    a = soup.find_all('a') #找到所有a标签全部存放到列表当中,此时a已经变成了一个列表
    for i in a :
        try:
            href = i.attrs['href'] #寻找到所有href属性的内容
            info_list.append(re.findall(r"[s][hz]\d{6}",href)[0]) #利用正则表达式寻找符合内容的条件,因为输出的是一个列表所以用[0]可以将外面的框消除
        except:
            continue #因为在找的过程中会出现各种错误,所以用try continue来保证程序继续运行

3、存储

def Save(inf_list,stock_url,fpath):
        for i in info_list: #遍历各个股票的代码 一个一个打开网站
            url = stock_url + i +'.html' #生成每支股票的url
            html = getContent(url) #获取页面
            try:
                if html =='': 
                    continue
                soup = BeautifulSoup(html,'html.parser')
                info_dict ={} #创建一个字典用来存放信息
                a_list = soup.find('div',attrs={'class':'stock-bets'}) #找到div标签下的属性为class 到stock-bets的内容
                name = a_list.find_all(attrs = {'class':'bets-name'})[0] #找出名字
                info_dict.update({'股票名称',name.text.split()[0]}) #以字典的形式存放到字典当中
                key_list = a_list.find_all('dv') #dv标签下对应的是这只股票所有键的名称,生成该列表
                value_list = a_list.find_all('dd')#所有值的名称生成列表
                for ee in range(len(key_list)):
                    key = key_list[i].text
                    value = value_list[i].text
                    info_dict[key]=value
                with open(fpath,'w',encoding='utf-8') as f:
                    f.write(str(info_dict)+'\n')
            except:
                tb.print_exc() #打印错误的原因
                continue

4、主函数运行

def main():
    stock_list_url = 'http://quote.eastmoney.com/stock_list.html'
    stock_url ='https://gupiao.baidu.com/stock/'
    list = []
    fpath = 'E:\\Text\\'
    producer(stock_list_url,list)
    Save(list,stock_url,fpath)

main()

总结:
1、BeautifulSoup()用来解析页面,可以使得目标内容更好找(提高效率)
2、soup.find_all(‘标签’) #把改标签的内容存入一个list
3、soup.find_all(attrs = {‘属性名’:‘属性名’}) #可以找到目标属性名
4、注意:要从不同网页获取信息,就要先获取各个网页之间的联系和规律
5、要经常的记得用异常处理来保证程序可以稳定的运行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章