Как действовать, если данные не принимаются при списании с python? - PullRequest
0 голосов
/ 30 апреля 2020

На этом сайте есть данные о запасах, и я пытаюсь субструктурировать некоторые данные с этого сайта. https://quickfs.net/company/AAPL: US

Где AAPL - это название акции, которое можно изменить.

страница выглядит как большая таблица: столбцы - это годы и строки представляют собой рассчитанные значения, такие как: рентабельность активов и валовая маржа

. Для этого я попытался следовать нескольким учебникам:

Введение в Web Scraping (Python) - Урок 02 (Таблицы очистки)

Введение в веб-чистку с помощью Python и Beautiful Soup

Веб-чистка HTML Столы с Python

Очистка веб-страниц с Python - от A до Z Часть A - Обработка BeautifulSoup и обход блоков

Я застрял в самом начале после импорта пакеты:

from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq

эта функция для извлечения данных с веб-страницы:

def make_soup(url):
    thepage=uReq(url)
    soupdata=soup(thepage, "html.parser")
    return(soupdata)

затем

soup=make_soup("https://quickfs.net/company/AAPL:US")

Теперь, при попытке посмотреть, какие данные внутри суп

soup.text

Вывод только это и не все данные с веб-страницы:

'\n\n\n\n\n\n\n\n\n\n\n\nExport Fundamental Data U.S. and International Stocks - QuickFS.net\n\n\n\n\n\n  \r\n  Loading QuickFS...\r\n  \n\n\n\n\n\n\n\n\n\n\n\n\n\n'

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

Ввод различных URL-адресов с помощью функции make_soup (url) иногда работает.

Прошу вашей доброй помощи

1 Ответ

0 голосов
/ 30 апреля 2020

Это потому, что эта страница полностью динамична c, что означает, что javascript выполняет всю работу, а BeautifulSoup4 не запускается JS.

Вам необходимо выбрать здесь:

  • A) Переключиться на что-то вроде Selenium
  • B) Проверить, какие XHR-сообщения отправляет сайт на api / сервер, и попытаться эмулировать это с python.

В случае B вы увидите, что сайт выполняет этот вызов:

curl 'https://api.quickfs.net/stocks/AAPL:US/ovr/Annual/' \
-XGET \
-H 'Accept: application/json, text/plain, */*' \
-H 'Content-Type: application/json' \
-H 'Origin: https://quickfs.net' \
-H 'Accept-Language: en-us' \
-H 'Host: api.quickfs.net' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15' \
-H 'Referer: https://quickfs.net/company/AAPL:US' \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Connection: keep-alive' \
-H 'X-Auth-Token: ' \
-H 'X-Referral-Code: '

Вместо этого вы можете сделать следующее:

import requests

response = request.get("https://api.quickfs.net/stocks/AAPL:US/ovr/Annual/")
data = response.json()

Где данные будут необработанные данные, которые использует сайт для представления информации:

{
    "datasets": {
        "metadata": {
            "_id": {},
            "qfs_symbol": "NAS:AAPL",
            "currency": "USD",
            "fsCat": "normal",
            "name": "Apple Inc.",
            "gs3_version_at_metadata_update": 20191106,
            "exchange": "NASDAQ",
            "industry": "Technology Hardware & Equipment",
            "symbol": "AAPL",
            "country": "US",
            "price": 278.58,
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...