用漂亮的汤刮tiingo HTML

用漂亮的汤刮tiingo HTML,html,python-3.x,web-scraping,beautifulsoup,tiingo,Html,Python 3.x,Web Scraping,Beautifulsoup,Tiingo,我想从tiingo.com上的各个网站上搜集标准普尔500指数公司的财务数据 例如,以以下URL为例: 其中显示了苹果公司最近的资产负债表数据 我希望提取最近一个季度的“不动产、厂房和设备”金额,在这个特殊情况下为25.45亿。但是,我在编写正确的Beauty Soup代码来提取此文本时遇到了问题 检查元素时,我看到25.45B编号在元素中的类“ng binding ng scope”和类“col-xs-6 col-sm-3 col-md-3 col-lg-3 statement field

我想从tiingo.com上的各个网站上搜集标准普尔500指数公司的财务数据

例如,以以下URL为例:

其中显示了苹果公司最近的资产负债表数据

我希望提取最近一个季度的“不动产、厂房和设备”金额,在这个特殊情况下为25.45亿。但是,我在编写正确的Beauty Soup代码来提取此文本时遇到了问题

检查元素时,我看到25.45B编号在元素中的类“ng binding ng scope”和类“col-xs-6 col-sm-3 col-md-3 col-lg-3 statement field data ng scope”中,该类本身在类“col-xs-7 col-sm-8 col-md-8 col-lg-9 no padding left no padding right”中

但是,我不知道如何准确地编写漂亮的代码来定位正确的元素,然后执行element.getText()函数

我是这样想的:

import os, bs4, requests

res_bal = requests.get("https://www.tiingo.com/f/b/aapl")

res_bal.raise_for_status()

soup_bal = bs4.BeautifulSoup(res_bal.text, "html.parser")

elems_bal = soup_bal.select(".col-xs-6 col-sm-3 col-md-3 col-lg-3 statement-field-data ng-scope")

elems_bal_2 = elems_bal.select(".ng-binding ng-scope")

joe = elems_bal_2.getText()

print(joe)

但到目前为止,我还没有成功地使用此代码。任何帮助都将不胜感激

选择器的问题

elems_bal = soup_bal.select(".col-xs-6 col-sm-3 col-md-3 col-lg-3 statement-field-data ng-scope")

elems_bal_2 = elems_bal.select(".ng-binding ng-scope")
也就是说,同一个类中存在多个页面元素,因此无法获得正确的结果

注意:如果您仅使用beautifulsoup和request,则页面源中的内容没有您要删除的数据,可以这样做 在selenium和beautifulsoup的帮助下,您可以这样做:如果您没有先安装selenium,请执行:
pip安装selenium

以下是相同的工作代码:

from selenium import webdriver
import  bs4, time

driver = webdriver.Firefox()   
driver.get("https://www.tiingo.com/f/b/aapl")
driver.maximize_window()
# sleep is given so that JS populate data in this time
time.sleep(10)
pSource= driver.page_source

soup = bs4.BeautifulSoup(pSource, "html.parser")

Property=soup.findAll('div',{'class':'col-xs-5 col-sm-4 col-md-4 col-lg-3 statement-field-name indent-2'})
for P in Property:
    if 'Property' in P.text.strip():
        print P.text

x=soup.find("a",{"ng-click":"toggleFundData('Property, Plant & Equipment',SDCol.restatedString==='restated',true)"})
print x.text
其输出为:

Property, Plant & Equipment
25.45B

内容是使用Javascript加载的,因此不在您得到的源代码中。选择(“.col-xs-6 col-sm-3 col-md-3 col-lg-3 statement field data ng scope”)甚至远未接近正确。你可能需要阅读文档,我是Tiingo的创始人,而这篇文章违反了条款。只需在quandl.com/sf1上以每月50美元的价格购买个人许可证。Sharadar的创始人是个好人,他非常努力地保持数据集的干净。谢谢你的回复,坏蛋!!