from lxml import etree
import time
import datetime
import requests
import csv
import os
headers={"User-Agent":"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"}
url="http://www.hkexnews.hk/sdw/search/mutualmarket_c.aspx?t=sh"
def down_trade(startime,endtime):
stime=datetime.datetime.strptime(startime,"%Y-%m-%d")
etime = datetime.datetime.strptime(endtime,"%Y-%m-%d")
while stime<=etime:
stime+=datetime.timedelta(days=1)
riqi=stime.strftime("%Y/%m/%d")
#print("开始处理日期:"+riqi)
get_trade(riqi)
def time_cover(yyymmdd):
#先转换为时间数组,然后转换为其他格式
timeStruct = time.strptime(yyymmdd, "%Y/%m/%d")
strTime = time.strftime("%Y%m%d", timeStruct)
return strTime
def get_trade(gupiaotime):
test="bb"
datatime={"__VIEWSTATE":"rsOtJ0nJbSHnmDmAQ4k9GqRAhZcgETrIumH22qa2qSAaFOpjijnJBpiD8hqGO+BtOLuyN3kCl9b5qppyJXuYhNOnPGGnbNkrKiFp57p5wG1myR2FiQ2BeZr/pLVlUzo+0cn0Sg==",
"__VIEWSTATEGENERATOR":"EC4ACD6F",
"__EVENTVALIDATION":"iolZ3bqvRxCSrdBulKA1DxE7yeWVXuo0LR+WALqR07DK5uZhX8A0VhCM7i4mMZuEDfNylGHpRLNRcSS+wrzGiMfCpdisMkqYvIblRsTGE1ZFk7Vs3UW2209Af70s4WVFwvkMO7JH/604O8paKyHCsrNXekiQBfFE+OHRr6calbQ4gs17ADLvZAZ1SD1o8fWfUa7zkVD6ypEox3e3nnOpCaXHxW91mO2YHZpg1+LB6ebuO4YjdU+CdwtoPAerVk+ONgIJBg==",
"today":"20181028",
"sortBy":"stockcode",
"sortDirection":"asc",
"alertMsg":"",
"txtShareholdingDate":gupiaotime,
"btnSearch":"搜尋"
}
repensoe=requests.post(url,headers=headers,data=datatime)
text=repensoe.text
html1=etree.HTML(text)
div=html1.xpath("//div[@id='pnlResult']//tbody/tr")
data=[]
print("--"*2)
valuetime=html1.xpath("//input[@id='txtShareholdingDate']/@value")
print(valuetime[0]+"有数据")
for lie in div:
code=lie.xpath("./td[1]/div/text()")[1]
name= lie.xpath("./td[2]/div/text()")[1]
num= lie.xpath("./td[3]/div/text()")[1]
zhanbi= lie.xpath("./td[4]/div/text()")[1]
datadic={"日期":time_cover(valuetime[0]),"股票代码":code,"股票名称":name,"持股量":num,"上市A股占比":zhanbi}
data.append(datadic)
filenme=time_cover(valuetime[0])+".csv"
csvhead=["日期","股票代码","股票名称","持股量","上市A股占比"]
with open(filenme,'w',newline='') as fp:
write = csv.DictWriter(fp,csvhead)
write.writeheader()
write.writerows(data)
if __name__ == "__main__":
down_trade("2018-09-30","2018-10-26")
#time_cover("2018/10/23")
print("ok")
#time_cover('2018-10-28')