shs_test.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from lxml import etree
  2. import requests
  3. import csv
  4. import os
  5. headers={"User-Agent":"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"}
  6. url="https://www.hkexnews.hk/sdw/search/searchsdw.aspx"
  7. datatime = {'__EVENTTARGET': 'btnSearch',
  8. '__EVENTARGUMENT':'',
  9. '__VIEWSTATE': '/wEPDwULLTIwNTMyMzMwMThkZHNjXATvSlyVIlPSDhuziMEZMG94',
  10. '__VIEWSTATEGENERATOR': '3B50BBBD',
  11. 'today': '20210205',
  12. 'sortBy': 'shareholding',
  13. 'sortDirection': 'desc',
  14. 'alertMsg':'',
  15. 'txtShareholdingDate': '2021/02/05',
  16. 'txtStockCode': '03800',
  17. 'txtStockName': '',
  18. 'txtParticipantID':'',
  19. 'txtParticipantName':''
  20. }
  21. repensoe=requests.post(url,headers=headers,data=datatime)
  22. text=repensoe.text
  23. html1 = etree.HTML(text)
  24. #print (text)
  25. div = html1.xpath("//div[@id='pnlResultNormal']//tbody/tr")
  26. data = []
  27. print("--" * 2)
  28. valuetime = html1.xpath("//input[@id='txtShareholdingDate']/@value")
  29. print(valuetime[0]+"Data available")
  30. filenme = '20190822' + ".csv"
  31. for tb in div:
  32. try:
  33. participant_id = tb.xpath("./td[1]/div/text()")[1]
  34. except IndexError:
  35. continue
  36. participant_name = tb.xpath("./td[2]/div/text()")[1]
  37. participant_address = tb.xpath("./td[3]/div/text()")[1]
  38. right = tb.xpath("./td[4]/div/text()")[1]
  39. percent = tb.xpath("./td[5]/div/text()")[1]
  40. datadic = {"date": valuetime[0], "Participant number": participant_id, "Central System Participant Name": participant_name, "address": participant_address, "Shareholding": right,"Proportion": percent}
  41. print (datadic)
  42. data.append(datadic)
  43. csvhead = ["date", "Participant number", "Central System Participant Name", "address", "Shareholding","Proportion"]
  44. os.getcwd()
  45. os.chdir("./holding")
  46. with open(filenme, 'w', newline='') as fp:
  47. write = csv.DictWriter(fp, csvhead)
  48. write.writeheader()
  49. write.writerows(data)