利用bs4和requests爬取股票历史交易数据

    xiaoxiao2021-12-03  26

    最近在学习优达学院的一门机器学习的课程,主要讲解利用机器学习分析股票数据,然后。课程网址在这里:https://classroom.udacity.com/courses/ud501

    所以需要大量的股票数据,我就先百度了一下,发现网易财经的数据很全,暴露的也很好,所以的数据都是放在一个<table>标签中,

    所以我就决定爬网易财经了,开始着手写爬虫。

    首先,是构造url。

    假如我要查询中国石油(601857)的2016年度的第三季度的交易数据,url是这样的。

    http://quotes.money.163.com/trade/lsjysj_601857.html?year=2016&season=3

    我们发现,这段url有3个参数,股票的代码601857,年度2016,季度3

    只要把这三个参数,当作函数的参数传进去,就可以获取到所有股票的所有的交易记录了,

    当然,我们暂时就先爬一只股票的所有交易记录就可以了。

    因为是每一个年度的每一个季度有不同的url,

    所以我们先开始写,爬取单个年度的单个季度的爬虫,之后再进行循环。

    def sharesCrawl(shareCode,year,season):三个参数,股票代码,年度,季度

    data = requests.get(url, headers=headers) soup = BeautifulSoup(data.text, 'lxml') table = soup.findAll('table',{'class':'table_bg001'})[0] rows = table.findAll('tr') 构造完url,就开始进行常规的BeautifulSoup+requests爬虫的编写了, 通过get请求url啊,再构造个head请求头过去。

    得到soup之后,找到table啊。再找到除去thead的rows,放进一个list中,方便以后的处理。

    但是因为得到的rows是由新到旧的,而我们之后的构造所有的年度是由旧到新的。

    所以还得对rows进行一下处理,倒序一下在返回

    return rows[::-1]

    这样爬虫的大致主体就写完了,之后开始写循环调用上面爬虫的函数,顺便写进csv文件。

    def writeCSV(shareCode,beginYear,endYear):也是三个参数:股票代码,起始年,结束年。

    首先先打开以股票代码为名字的csv

    csvFile = open('./data/' + shareCodeStr + '.csv', 'wb') writer = csv.writer(csvFile) writer.writerow(('日期','开盘价','最高价','最低价','收盘价','涨跌额','涨跌幅','成交量','成交金额','振幅','换手率')) 再写进第一行。

    之后就可以循环调用我们的sharesCrawl函数了。

    for i in range(beginYear, endYear + 1): print str(i) + ' is going' time.sleep(4) for j in range(1, 5): rows = sharesCrawl(shareCode,i,j) for row in rows: csvRow = [] # 判断是否有数据 if row.findAll('td') != []: for cell in row.findAll('td'): csvRow.append(cell.get_text().replace(',','')) if csvRow != []: writer.writerow(csvRow) time.sleep(3) print str(i) + '年' + str(j) + '季度is done' 不要吐槽有四层循环,中间的循环季度可以优化,因为季度是1234是固定的。

    别的三层就很难被优化了。优化的话,之前的函数soup.find需要重新调整思路。

    第一层:循环起始年到截至年,第二层,循环季度1234,

    第三层,还记得我们的rows返回的是个tags    list吗,循环每一个tag

    第四层,获取到了每一行的数据,循环出每一行的每一个数据,放在一个csvRow中,以便写入csv中。

    writer.writerow(csvRow)就是将刚才的存放每一个数据的list写入csv文件。

    这样就大功告成了,是不是特别简单呢。

    所有的代码我已经在github上开源:https://github.com/Yangzhedi/pythonSpider/tree/master/by-bs4/stock,欢迎大家star,fork哈~~~~

    转载请注明原文地址: https://ju.6miu.com/read-679893.html

    最新回复(0)