from flask import Flask, render_template_string, request
import requests
import pandas as pd
from bs4 import BeautifulSoup
app = Flask(__name__)
Charting_Link = "https://chartink.com/screener/"
Charting_url = 'https://chartink.com/screener/process'
# Replace this with your desired condition
Condition = "( {33489} ( latest volume > latest sma( latest volume , 10 ) * 2 ) )"
def GetDataFromChartink(payload):
payload = {'scan_clause': payload}
with requests.Session() as s:
r = s.get(Charting_Link)
soup = BeautifulSoup(r.text, "html.parser")
csrf = soup.select_one("[name='csrf-token']")['content']
s.headers['x-csrf-token'] = csrf
r = s.post(Charting_url, data=payload)
df = pd.DataFrame()
for item in r.json()['data']:
df = df.append(item, ignore_index=True)
return df
@app.route('/', methods=['GET', 'POST'])
def index():
data = None
if request.method == 'POST':
data = GetDataFromChartink(Condition)
data = data.sort_values(by='per_chg', ascending=False)
data.to_csv("Chartink_result.csv")
return render_template_string('''
Chartink Data
Chartink Data Fetcher
{% if data is not none %}
Results:
{% for col in data.columns %}
{% endfor %}
{% for row in data.iterrows() %}
{% for value in row[1] %}
{% endfor %}
{% endfor %}
{% endif %}
''', data=data)
if __name__ == '__main__':
app.run(debug=True)