sharehold.py 2.5 KB

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