首页 > 解决方案 > 如何使用 Python 从表中选择特定值?

问题描述

所以,我目前有这个从 finviz 提取数据并输出股票的整个统计表。但是,我希望只能从特定的“单元格中提取金额或百分比:

    #---------- Pretend to be a browser. ----------#
headers = {
  "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36",
  "X-Requested-With": "XMLHttpRequest"
}

#---------- Import needed modules. ----------#
import pandas as pd
from bs4 import BeautifulSoup
import requests

#---------- Choose your ticker. Takes input. ----------#
ticker = input("Please choose a ticker symbol: ")
print("Loading data for " + ticker.upper())


#---------- Pulling the data from chosen stock ticker ----------#
url = ('https://finviz.com/quote.ashx?t=' + ticker.upper())

req = requests.get(url,headers=headers)
table = pd.read_html(req.text, attrs = {"class":"snapshot-table2"} )
df = table[0]
print(df)

这给了我(我切断了一些输出,以免问题太长):

请选择股票代码:ko

为 KO 加载数据

0            1              2       3              4           5   \
0        Index  DJIA S&P500            P/E   30.02      EPS (ttm)        1.87   
1   Market Cap      242.71B    Forward P/E   23.00     EPS next Y        2.44   
2       Income        8.08B            PEG    2.97     EPS next Q        0.58   
3        Sales       36.41B            P/S    6.67     EPS this Y     -13.30%   
4      Book/sh         5.16            P/B   10.85     EPS next Y       7.84%   
5      Cash/sh         3.01            P/C   18.61    EPS next 5Y      10.12%   
6     Dividend         1.68          P/FCF   93.97    EPS past 5Y       1.40%   
7   Dividend %        3.00%    Quick Ratio    1.30  Sales past 5Y      -5.70%   
8    Employees        80300  Current Ratio    1.50      Sales Q/Q      41.70%   
9   Optionable          Yes        Debt/Eq    1.89        EPS Q/Q      47.70%   
10   Shortable          Yes     LT Debt/Eq    1.79       Earnings  Jul 21 BMO   
11       Recom         2.20          SMA20  -1.44%          SMA50       0.48%   

我怎样才能只拉一个“细胞”?假设我想要当前的市盈率,我怎么才能得到“30.02”?谢谢!

标签: pythonweb-scraping

解决方案


您可以通过这种方式简单地打印任何选择性数据:

#---------- Pretend to be a browser. ----------#
headers = {
  "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36",
  "X-Requested-With": "XMLHttpRequest"
}

#---------- Import needed modules. ----------#
import pandas as pd
from bs4 import BeautifulSoup
import requests

#---------- Choose your ticker. Takes input. ----------#
ticker = input("Please choose a ticker symbol: ")
print("Loading data for " + ticker.upper())

#---------- Pulling the data from chosen stock ticker ----------#
url = ('https://finviz.com/quote.ashx?t=' + ticker.upper())

req = requests.get(url,headers=headers)
table = pd.read_html(req.text, attrs = {"class":"snapshot-table2"} )
df = table[0]
print(f'{df[2][0]}: {df[3][0]}')

输出:

Please choose a ticker symbol: ko
Loading data for KO
P/E: 30.02

推荐阅读