Python 使用BeautifulSoup收集对冲基金数据

Python 使用BeautifulSoup收集对冲基金数据,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我想从hedgefollow.com上搜集数据。我尝试了以下代码,但没有得到每个股票所需的输出,而是只得到标题,而不是实际数据(例如,第一行:AMZN,亚马逊公司,14.32%,180.70万美元,3.5231亿美元,713.3%,158.48万美元等) 输出: 股票。 公司名称。 %投资组合。 股份。 价值。 %改变。 改变。 所有权历史。 价格历史记录。 日期 我错过了什么 此页面使用JavaScript添加元素,但请求/美化组无法运行JavaScript。您可以使用来控制可以运行JavaS

我想从hedgefollow.com上搜集数据。我尝试了以下代码,但没有得到每个股票所需的输出,而是只得到标题,而不是实际数据(例如,第一行:AMZN,亚马逊公司,14.32%,180.70万美元,3.5231亿美元,713.3%,158.48万美元等)

输出:

股票。
公司名称。
%投资组合。
股份。
价值。
%改变。
改变。
所有权历史。
价格历史记录。
日期


我错过了什么

此页面使用
JavaScript
添加元素,但
请求
/
美化组
无法运行
JavaScript
。您可以使用来控制可以运行
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.

此页面使用
JavaScript
添加元素,但
请求
/
美化组
无法运行
JavaScript
。您可以使用来控制可以运行
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.

此页面使用JavaScript添加元素,但
请求
/
美化组
无法运行JavaScript。您可能需要Selenium来控制可以运行JavaScript的真实web浏览器。或者您可以尝试在Firefox/Chrome(选项卡:网络,过滤器:XHR)中手动使用
DevTools
,以查找JavaScript用于获取数据的url,然后您可以尝试将此url与
请求一起使用。通常它以JSON格式提供数据,您可以轻松地将其转换为Python dict/list,而不需要@furas所述的
BeautifulSoup
。我检查了XHR,没有找到获取json repsonse的url。您需要使用Selenium,它们还提供了一个API(滚动到底部)。单击此处,阅读并联系他们此页面使用JavaScript添加元素,但
请求
/
美化组
无法运行JavaScript。您可能需要Selenium来控制可以运行JavaScript的真实web浏览器。或者您可以尝试在Firefox/Chrome(选项卡:网络,过滤器:XHR)中手动使用
DevTools
,以查找JavaScript用于获取数据的url,然后您可以尝试将此url与
请求一起使用。通常它以JSON格式提供数据,您可以轻松地将其转换为Python dict/list,而不需要@furas所述的
BeautifulSoup
。我检查了XHR,没有找到获取json repsonse的url。您需要使用Selenium,它们还提供了一个API(滚动到底部)。单击此处,阅读并联系他们