Почему разные URL возвращают одну и ту же страницу? - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь очистить каждую страницу таблицы данных на этой странице: https://etfdb.com/tool/etf-stock-exposure-tool/#stock & page = 1 . Как вы можете видеть, когда вы выбираете новую страницу вручную с помощью кнопок на веб-сайте, URL-адрес изменяется соответствующим образом. Также, если вы измените номер страницы и обновите sh URL, страница будет обновлена ​​соответствующим образом. Однако, когда я запускаю следующее l oop:

import requests
from bs4 import BeautifulSoup

for i in range(1,7): # 6 pages
    page = requests.get('https://etfdb.com/tool/etf-stock-exposure-tool/#stock&page={}'.format(i))
    soup = BeautifulSoup(page.content, 'html.parser')
    table = soup.find('tbody')

tablepage и soup) последовательно возвращает данные со страницы 1 независимо от того, какой номер есть в URL.

Как мне заставить это работать (как получить все данные из таблицы, а не только с первой страницы)?

1 Ответ

0 голосов
/ 02 февраля 2020

Данные первой страницы доступны в HTML. Но если вы заметили, что при смене страницы она не загружает всю страницу, она отправляет запрос AJAX и изменяет данные таблицы. Данные второй страницы заполнены динамически, используя Javascript из JSON. Вы можете найти запрос AJAX во вкладке XHR в браузере под Network.

AJAX Request in NetworkTab

Вам необходимо использовать AJAX запрос получить данные с этой веб-страницы.

import requests

url = 'https://etfdb.com/data_set/'

limit = 25
offset = 0

while True:
    params = {"tm":"40283","cond":"{\"most_popular\":null}","no_null_sort":"true","count_by_id":"","limit":[limit,limit],"offset":offset}
    response = requests.get(url, params=params)

    json_data = response.json()

    for stock in json_data['rows']:
        print(stock['stock_name'], end=' | ')

    offset += limit
    if json_data['total'] < offset:
        break

Выход:

Apple Inc | Abbott Laboratories | Barrick Gold Corp | Accenture <span class="caps">PLC</span> | Analog Devices Inc | Alliance Data Systems Corp | Autodesk Inc | <span class="caps">AGNC</span> Investment Corp | American International Group Inc | Amgen Inc | American Tower Corp | TD Ameritrade Holding Corp | Amazon.com Inc | Apache Corp | ..... | Bank of China Ltd | Samsung Electronics Co Ltd | SoftBank Group Corp
...