Не получается парсить в режиме "онлайн"
Стояла задача: узнавать о новых name в таблице на сайте как можно быстрее. https://www.nasdaqtrader.com/trader.aspx?id=TradeHalts
Реализация: Код через webdriver заходит на сайт. Парсит name. Уходит с сайта. Ждёт 15 сек. И всё по новой
from selenium import webdriver
from bs4 import BeautifulSoup
from time import sleep
def parse():
options = webdriver.ChromeOptions()
options.add_argument('headless')
browser = webdriver.Chrome(options=options)
browser.get('https://www.nasdaqtrader.com/trader.aspx?id=TradeHalts')
HTML = browser.page_source
soup = BeautifulSoup(HTML, 'html.parser')
table = soup.find(class_="genTable").find('tbody')
block = table.find_all('tr')[1].text.split('\n')
# name = block[4]
browser.quit()
return block[4]
if __name__ == '__main__':
while True:
name = parse()
print(name)
sleep(15)
При интервале 1-10 сек сайт банит
Вопрос: можно ли как-то парсить name непрерывно, без паузы в 15 сек?
Ответы (1 шт):
Автор решения: Eugene X
→ Ссылка
Вот, попробуй... Если получиться разогнать, и регуляркой вытащить значения - то получится отличная альтернатива
import requests
import json
from time import sleep
url = 'https://www.nasdaqtrader.com/RPCHandler.axd'
headers = {
"Accept-Language": "en-US,en;q=0.8,pt;q=0.6",
"Connection": "keep-alive",
"Referer": "https://www.nasdaqtrader.com/trader.aspx?id=TradeHalts"
}
post_data = {
"id": 1,
"method": "BL_TradeHalt.GetTradeHalts",
"params": "[]",
"version": "1.1"
}
def BL_TradeHalt_GetTradeHalts():
post_data["id"] += 1 # это нужно что-бы RPCHandler не подумал о hammering
x = requests.post(url, data=json.dumps(post_data), headers=headers)
return x.text
def main():
while True:
response = json.loads(BL_TradeHalt_GetTradeHalts())
print(response["result"])
sleep(5)
if __name__ == "__main__":
main()
