Веб-помощь - PullRequest
       14

Веб-помощь

1 голос
/ 11 октября 2019

Я должен извлечь некоторую информацию с этой веб-страницы. Я знаю, что есть более простые способы получения этой информации, но это то, что мне поручено. До сих пор я пытался это:

import pandas as pd
import requests
from bs4 import BeautifulSoup

url = 'https://www.nasdaq.com/market-activity/funds-and-etfs/qqq/historical'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')

Отсюда я пытаюсь прочитать это непосредственно в DataFrame Pandas, используя:

df = pd.read_html(str(soup.select('historical-data__table')))

Однако,Я получаю эту ошибку:


  File "<ipython-input-94-f3a234b1eafd>", line 1, in <module>
    df = pd.read_html(str(soup.select('historical-data__table')))

  File "C:\Anaconda3\lib\site-packages\pandas\io\html.py", line 1094, in read_html
    displayed_only=displayed_only)

  File "C:\Anaconda3\lib\site-packages\pandas\io\html.py", line 916, in _parse
    raise_with_traceback(retained)

  File "C:\Anaconda3\lib\site-packages\pandas\compat\__init__.py", line 420, in raise_with_traceback
    raise exc.with_traceback(traceback)

ValueError: No tables found

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Эти данные поступают из API, который https://api.nasdaq.com/api/quote/QQQ/historical?assetclass=etf&fromdate=2019-09-11&limit=18&todate=2019-10-11

Вы можете получить его напрямую, используя :

import requests

response = requests.get(
    'https://api.nasdaq.com/api/quote/QQQ/historical',
    params = {
        'assetclass':'etf',
        'fromdate':'2019-09-11',
        'todate': '2019-10-11',
        'limit': 18
    }
)
print(response.json()['data']['tradesTable']['rows'])
0 голосов
/ 11 октября 2019

Я только что попробовал ваш скрипт как есть и посмотрел на вывод. Кажется, что контент, который вы ищете, не извлекается, что указывает на то, что он создается динамически через javascript. Красивый суп не имеет возможности обрабатывать динамический контент, поскольку он может только читать данные, которые загружаются немедленно, в отличие от JavaScript, который может загружать контент, когда документ готов. Я бы посмотрел на селен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...