最近在学习数据分析,就想着弄一份csv文件练手用,于是就爬取了股票信息,生成csv文件
爬取的网址:http://quote.eastmoney.com/ztb/detail#type=ztgc
网址信息使用的是动态加载,所以使用了selenium,我是使用的是谷歌浏览器,需要下载谷歌浏览器的驱动程序,下载地址:https://npm.taobao.org/mirrors/chromedriver/(谷歌浏览器最近更新了,已经下载好的朋友需要看一下更新过后的版本和驱动版本是否对应)
代码:
from lxml import etree
from fake_useragent import UserAgent
from selenium import webdriver
from time import sleep
import csv
#伪装
ua = UserAgent()
headers = {'User-Agent':ua.random}
def get_data(response):
response = etree.HTML(response)
#获取头信息
heads = response.xpath('//*[@id="ztgctable"]/thead/tr//text()')
#获取每只股票信息
tr_list = response.xpath('//*[@id="ztgctable"]/tbody/tr')
#用来存放所有的数据
shares_data = []
for i in tr_list:
data = i.xpath('./td//text()')
shares_data.append(data)
return heads,shares_data
def to_scv(head,shares_data):
# 一些麻烦的数据直接删掉
del head[13]
del head[15]
with open(file='./shares_data.csv', mode='w', newline='', encoding='utf-8') as file:
# 创建csv写入对象
csv_file = csv.writer(file)
# 写入头部信息
csv_file.writerow(head)
#写入股票信息
for row in shares_data:
#将’炸板次数‘为零的改为nan,在使用数据分析时可以用到
if row[12] == '0':
row[12] = 'nan'
#麻烦的数据删掉
del row[13:17]
csv_file.writerow(row)
print('csv文件生成成功')
def main():
web = webdriver.Chrome(executable_path='chromedriver.exe')
# 发起请求
web.get('http://quote.eastmoney.com/ztb/detail#type=ztgc')
# 定位点击获取更多按钮
btn = web.find_element_by_xpath('//*[@id="ztgctable"]/tfoot/tr/td')
btn.click()
#进入睡眠状态是因为点击获取更多后浏览器需要时间加载
sleep(3)
# 获取页面源代码
response = web.page_source
heads,shares_data = get_data(response)
to_scv(heads,shares_data)
if __name__ == '__main__':
main()
运行成功后,会在统计目录下生成shares_data.csv文件
针对代码说明:
本次代码只针对 ‘涨停股池’ 模块,几个模块对应的内容是不一样的。
本着多一事不如少一事的原则,删去了 ‘涨停统计’ 和‘加自选’ 列
‘炸板次数’ 为0次的将数据变为了nan,用于数据分析中的nan值处理使用
生成csv文件的部分内容(不得不说,csv文件看着真舒服):
用pandas读取一下试试:
import pandas as pd
data = pd.read_csv('shares_data.csv').head()
print(data)
需要csv文件的朋友可以直接下载,也可将复制代码运行一下。
下载地址:https://download.csdn.net/download/HAH_HAH/12319466