Python 使用BeautifulSoup收集对冲基金数据
我想从hedgefollow.com上搜集数据。我尝试了以下代码,但没有得到每个股票所需的输出,而是只得到标题,而不是实际数据(例如,第一行:AMZN,亚马逊公司,14.32%,180.70万美元,3.5231亿美元,713.3%,158.48万美元等) 输出: 股票。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
公司名称。
%投资组合。
股份。
价值。
%改变。
改变。
所有权历史。
价格历史记录。
日期
我错过了什么 此页面使用
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(滚动到底部)。单击此处,阅读并联系他们