Не получается парсить в режиме "онлайн"

Стояла задача: узнавать о новых 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()

→ Ссылка