Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

StockMetrics.py 6.0 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  1. from time import sleep
  2. import requests
  3. from bs4 import BeautifulSoup
  4. from lxml import etree
  5. import numpy as np
  6. import pandas as pd
  7. tickerData = pd.read_csv('Cleaned_Tickers.csv')
  8. prices = []
  9. marketCaps = []
  10. PE = []
  11. EPS = []
  12. ratio = []
  13. divY = []
  14. Vol = []
  15. Tickers = tickerData.Tickers
  16. Names = tickerData.Names
  17. Sectors = tickerData.Sectors
  18. for i in range(len(tickerData)): # range(len(tickerData))
  19. ticker = Tickers[i]
  20. URL = f"https://finance.yahoo.com/quote/{ticker}?p={ticker}"
  21. print(i, ticker, URL)
  22. headers = {
  23. }
  24. content = requests.request('GET', URL, headers={'path': f'/quote/{ticker}?p={ticker}',
  25. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 '
  26. 'Safari/537.36',
  27. 'scheme': 'https',
  28. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
  29. 'Cookie': 'tbla_id=6b642cc0-9ff6-4e67-aa31-1fdeea518b01-tuctae397ee; F=d=cSLEybE9vCX6.RRctEuA7W0H1q8dxhYYra0yu.oc59JM; PH=l=en-US; Y=v=1&n=2jl8gn6380s6n&l=00hj8_l08170l/o&p=f28vvin00000000&iz=400099&r=ee&intl=us; gam_id=y-hOSqWWFG2uJXh4mgLyiH4qY.WFYB27lZfasUHTGUGSecYd_PMQ---A; ucs=tr=1691402027000; OTH=v=2&s=2&d=eyJraWQiOiIwMTY0MGY5MDNhMjRlMWMxZjA5N2ViZGEyZDA5YjE5NmM5ZGUzZWQ5IiwiYWxnIjoiUlMyNTYifQ.eyJjdSI6eyJndWlkIjoiMkZHUVdRQzdISkxYSVVFTzJRTTdBVDZETk0iLCJwZXJzaXN0ZW50Ijp0cnVlLCJzaWQiOiI2WVo4akt0eVpwYTMifX0.8N_R8R5ufYVTxK_9Kwvf7ar27FkH4Vp1hzkrCZhuFVjQrf_0KgfILc3UQvog-kAWpgh1InAMHoH18mGkEpH4yfZTn_nT2s5NrD9hWNScBmtaXuub98ihCYNoVnsV2dULZYFdipXJDQ4aYpwyOeQqhepIJ6it89aRwjkFm1GXr4Q; T=af=QkNBQkJBJnRzPTE2OTI2NDcxMjMmcHM9TmpxeThMOEl3UHNfcUlkajhZMTY5Zy0t&d=bnMBeWFob28BZwEyRkdRV1FDN0hKTFhJVUVPMlFNN0FUNkROTQFhYwFBSU14TGUxSgFhbAFhYXJ0aV92YWliaGF2AXNjAWRlc2t0b3Bfd2ViAWZzAUhwTnlIcXBrbkZoVQF6egFUNzc0a0JBN0UBYQFRQUUBbGF0AVVoRm5rQgFudQEw&kt=EAAFn_5pi5sAS72qhesjXSH3w--~I&ku=FAALxkhH241oqEtbu.3qlAjNPA2U0urNsvmUty1qYD74p24gSlzkcCViMUzBtqWKTC07aYYbk0dEk4YlOvAqljsnSV8wUZUBpEeWo22FSA2_0h26tg_3xiX7EVc6xSqDCT47gekVVMG1HVnHSxhtglnVgXqDP0Me1ziNdCYx2zjDFg-~E; axids=gam=y-hOSqWWFG2uJXh4mgLyiH4qY.WFYB27lZfasUHTGUGSecYd_PMQ---A&dv360=eS1ZVXBPb2NWRTJ1R25kUHozZGtRRzFlNFZZaFB3UFJIblYuNTgwWU85NWo3MFlkbUVnRGw0UEwuSmhKUmwxT0UxQ01KMX5B; maex=%7B%22v2%22%3A%7B%22dadb9128%22%3A%7B%22lst%22%3A1698603940%2C%22ic%22%3A1%7D%7D%7D; GUC=AQEBCAFlQ7FlckIhlgSh&s=AQAAADZJQxbr&g=ZUJl1g; A1=d=AQABBGQS6mMCENyPKExEbHvh2Yj1EBa8aNgFEgEBCAGxQ2VyZVlQb2UB_eMBAAcIZBLqYxa8aNgID8BXLbruyzkQIrPOgM9IKgkBBwoBCw&S=AQAAAkQmK-LnA09xhHuN9Q4E7Qk; A3=d=AQABBGQS6mMCENyPKExEbHvh2Yj1EBa8aNgFEgEBCAGxQ2VyZVlQb2UB_eMBAAcIZBLqYxa8aNgID8BXLbruyzkQIrPOgM9IKgkBBwoBCw&S=AQAAAkQmK-LnA09xhHuN9Q4E7Qk; A1S=d=AQABBGQS6mMCENyPKExEbHvh2Yj1EBa8aNgFEgEBCAGxQ2VyZVlQb2UB_eMBAAcIZBLqYxa8aNgID8BXLbruyzkQIrPOgM9IKgkBBwoBCw&S=AQAAAkQmK-LnA09xhHuN9Q4E7Qk; gpp=DBAA; gpp_sid=-1; cmp=t=1700420968&j=0&u=1YNN; PRF=t%3DAAPL%252BWEC%252B%255EGSPC%26newChartbetateaser%3D1; __gpi=UID=00000cdb8650fcba:T=1700420969:RT=1700422041:S=ALNI_MZcG6j_95mgHOGFvLKM1tyq3m6zvA; __gads=ID=281786745495dc8c:T=1700422045:RT=1700422045:S=ALNI_MY19a0zNj7xmJIluuK4Ocoiz8Fwtg'
  30. })
  31. sleep(5)
  32. soup = BeautifulSoup(content.text, 'html.parser')
  33. dom = etree.HTML(str(soup))
  34. # print(soup.text)
  35. try:
  36. price = dom.xpath(
  37. '/html/body/div[1]/div/div/div[1]/div/div[3]/div[1]/div/div[1]/div/div/div/div[2]/div[1]/table/tbody/tr[1]/td[2]')[
  38. 0].text
  39. mcap = dom.xpath(
  40. '/html/body/div[1]/div/div/div[1]/div/div[3]/div[1]/div/div[1]/div/div/div/div[2]/div[2]/table/tbody/tr[1]/td[2]')[
  41. 0].text
  42. pe = dom.xpath(
  43. '/html/body/div[1]/div/div/div[1]/div/div[3]/div[1]/div/div[1]/div/div/div/div[2]/div[2]/table/tbody/tr[3]/td[2]')[
  44. 0].text
  45. eps = dom.xpath(
  46. '/html/body/div[1]/div/div/div[1]/div/div[3]/div[1]/div/div[1]/div/div/div/div[2]/div[2]/table/tbody/tr[4]/td[2]')[
  47. 0].text
  48. divYd = dom.xpath(
  49. '/html/body/div[1]/div/div/div[1]/div/div[3]/div[1]/div/div[1]/div/div/div/div[2]/div[2]/table/tbody/tr[6]/td[2]')[
  50. 0].text
  51. vol = dom.xpath(
  52. '/html/body/div[1]/div/div/div[1]/div/div[3]/div[1]/div/div[1]/div/div/div/div[2]/div[1]/table/tbody/tr[8]/td[2]')[
  53. 0].text
  54. print(price, mcap, pe, eps, divYd, vol)
  55. if price != 'N/A':
  56. prices.append(float(str(price).replace(",", "")))
  57. marketCaps.append(mcap)
  58. EPS.append(float(str(eps).replace(",", "")))
  59. if pe != 'N/A':
  60. PE.append(float(str(pe).replace(",", "")))
  61. ratio.append(round(float(str(eps).replace(",", ""))/float(str(pe).replace(",", "")), 3))
  62. else:
  63. PE.append(-1)
  64. ratio.append(-1)
  65. if 'N/A' in divYd:
  66. divY.append(-1)
  67. else:
  68. div = float(str(divYd).split(sep='(')[1].split(sep='%')[0])
  69. divY.append(div)
  70. Vol.append(float(str(vol).replace(",", "")))
  71. else:
  72. print("WAH")
  73. raise Exception
  74. except:
  75. print(prices, marketCaps, PE, EPS, divY, Vol)
  76. print("Fail")
  77. prices.append(-1)
  78. marketCaps.append(-1)
  79. PE.append(-1)
  80. EPS.append(-1)
  81. ratio.append(-1)
  82. divY.append(-1)
  83. Vol.append(-1)
  84. sleep(3)
  85. print(prices)
  86. print(marketCaps)
  87. print(PE)
  88. print(EPS)
  89. print(ratio)
  90. print(divY)
  91. print(Vol)
  92. d = {'Ticker': Tickers,
  93. 'Price': prices,
  94. 'MCap': marketCaps,
  95. 'PE': PE,
  96. 'EPS': EPS,
  97. 'Earnings_Yield': ratio,
  98. 'Div_Yield': divY,
  99. 'Volume': Vol}
  100. df = pd.DataFrame(data=d)
  101. df.to_csv('final1.csv')
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...