最近在學習數據分析,就想着弄一份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