Красивый суп отсутствует данные - PullRequest
0 голосов
/ 21 октября 2018

Я использую красивый суп, чтобы попытаться собрать некоторую финансовую информацию с нескольких разных сайтов, но я замечаю, что большая часть информации html отсутствует в том, что я очищаю.Я попытался html.parser, lxml и html5lib при анализе извлеченной информации без удачи.

Ниже приведен пример кода, который я использовал на двух разных сайтах, которые я пробовал.В обоих примерах я пытаюсь получить информацию о рыночной капитализации, но мне кажется, что я никогда не получаю ее в своем разобранном виде.

#!/usr/bin/env python

def get_marketcap(security):
    from bs4 import BeautifulSoup as bs
    from urllib.request import urlopen

    loc = 'https://stockrow.com/AAPL'
    loc = 'https://www.wolframalpha.com/input/?i=GOOGL+historical+market+capitalization+1.7.2018-1.10.2018'
    page = urlopen(loc)
    #soup = bs(page, 'html.parser')
    #soup = bs(page, 'lxml')
    soup = bs(page, 'html5lib')

    return soup, name_box


soup,name_box = get_marketcap('AAPL')

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Как предлагается в комментариях, вы сможете использовать замечательную библиотеку requests-html (создателем запросов) для захвата элементов, отображаемых с помощью JavaScript.Вы можете настроить время ожидания / ожидания, но приведенный ниже код работает как для ваших ссылок, так и возвращается полный HTML-контент.

def get_marketcap(url_path):
    from requests_html import HTMLSession
    session = HTMLSession()

    r = session.get(url_path)
    r.html.render(wait = 8, sleep = 8)

    return r.html

#url_path = 'https://www.wolframalpha.com/input/?i=GOOGL+historical+market+capitalization+1.7.2018-1.10.2018'
url_path = 'https://stockrow.com/AAPL'
content = get_marketcap(url_path)
print(content.html)

Также обратите внимание, что requests-html не поддерживает iPython, вывод можно сохранить в текстовом файле или распечатать для просмотра.

0 голосов
/ 21 октября 2018

Необходимые данные поступают из XHR, и вы можете получить их с помощью прямого запроса API:

import requests

response_content =  requests.get('https://stockrow.com/api/companies/AAPL.json?ticker=AAPL').json()
print(response_content['prices'][0]['close'])
# 219.31

ОБНОВЛЕНИЕ

Если вам нужны значения из таблицы (например, рыночная капитализация значение), вы можете использовать

response_content =  requests.get('https://stockrow.com/api/companies/AAPL/key_stats.json?ticker=AAPL').json()
print([item['value'] for item in response_content if item['indicator'] == "MARKETCAP:MRM"][0])
#  1077938914780.0000 # 1077938914780.0000 == 1,077,938.91m

Таким же образом вы можете извлекать другие значения, такие как Значение предприятия (ключ - "EV:MRM"), Доход (ключ - "REVENUE:MRT") и т. Д ... Просто замените ключ "MARKETCAP:MRM" на соответствующий в приведенной выше строке кода

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