Веб-парсинг данных хедж-фондов с BeautifulSoup - PullRequest
1 голос
/ 25 мая 2020

Я хотел бы очистить данные с hedgefollow.com. Я пробовал следующий код, но не получаю требуемый вывод для каждой акции, а только заголовок, а не фактические данные (например, первая строка: AMZN, Amazon Com In c, 14,32%, 180,70k, 352,31 долл. США M, 713,3%, 158,48 тыс. И т. Д.)

Вывод:

Акции.
Название компании.
% портфеля.
Акции.
Стоимость .
% изменения.
изменения.
истории владения.
истории цен.
даты.

import requests
from bs4 import BeautifulSoup
r = requests.get('https://hedgefollow.com/funds/Duquesne+Family+Office')
soup = BeautifulSoup(r.text, 'html.parser')
hf_table = soup.find_all('table', {'id': 'dgtopHolders'})[0]
for row in hf_table.find_all('tr'):
    for cell in row.find_all('th'):
        print(cell.text)

Что мне не хватает?

1 Ответ

0 голосов
/ 25 мая 2020

Эта страница использует JavaScript для добавления элементов, но requests / BeautifulSoup не может работать JavaScript. Вы можете использовать Selenium для управления настоящим веб-браузером, который может запускать JavaScript

import selenium.webdriver
import time

url = 'https://hedgefollow.com/funds/Duquesne+Family+Office'

driver = selenium.webdriver.Firefox()
driver.get(url)

time.sleep(3)

table = driver.find_element_by_id('dgtopHolders')

print('--- headers ---')

row = table.find_elements_by_tag_name('tr')[0]
for cell in row.find_elements_by_tag_name('th'):
    print(cell.text)

print('--- data ---')

for row in table.find_elements_by_tag_name('tr')[1:]:
    for cell in row.find_elements_by_tag_name('td'):
        print(cell.text)
    print('---')

Результат:

--- headers ---
Stock
Company Name
% of Portfolio
Shares
Value
% Change
Change
Ownership History
Price History
Date
--- data ---
AMZN
Amazon Com Inc
14.32%
180.70k
$ 352.31M
713.3%
158.48k


2020-03-31
---
NFLX
Netflix Inc
12.92%
846.65k
$ 317.92M
45.26%
263.79k


2020-03-31
---
WDAY
Workday Inc
8.73%
1.65M
$ 214.76M
8.82%
133.66k


2020-03-31
---
FB
Facebook Inc
8.43%
1.24M
$ 207.46M
75.42%
534.74k


2020-03-31
---
MSFT
Microsoft Corp
7.08%
1.10M
$ 174.24M
-31.82%
-515.60k


2020-03-31
---

# etc.
...