Pandas FinViz-库存刮送错误--未找到AMZN';非类型';对象没有属性';查找下一个';

Pandas FinViz-库存刮送错误--未找到AMZN';非类型';对象没有属性';查找下一个';,pandas,beautifulsoup,Pandas,Beautifulsoup,我是新来的美女套餐。 我正在玩一个从某个网站上得到的代码,我被上面的错误卡住了。请帮忙 import pandas as pd import re from bs4 import BeautifulSoup as bs import requests def get_fundamental_data(df): for symbol in df.index: try: url = ("http://finviz.com/quote.as

我是新来的美女套餐。 我正在玩一个从某个网站上得到的代码,我被上面的错误卡住了。请帮忙

import pandas as pd
import re
from bs4 import BeautifulSoup as bs
import requests

def get_fundamental_data(df):
    for symbol in df.index:
        try:      
            url = ("http://finviz.com/quote.ashx?t=" + symbol.lower())
            soup = bs(requests.get(url).content) 
            for m in df.columns:                
                df.loc[symbol,m] = fundamental_metric(soup,m)                
        except Exception as e:
            print (symbol, 'not found')
            print(e)
    return df


def fundamental_metric(soup, metric):
    return soup.find(text=metric).find_next(class_='snapshot-td2').text

# Define A List Of Stocks And The Fundamental Metrics

stock_list = ['AMZN', 'GOOG', 'PG', 'KO', 'IBM', 'DG', 'XOM',
              'KO', 'PEP', 'MT', 'NL', 'ALDW', 'DCM', 'GSB', 'LPL']
metric = ['P/B',
          'P/E',
          'Forward P/E'
          ]

df = pd.DataFrame(index=stock_list, columns=metric)
df = get_fundamental_data(df)
df.head()

我运行了您的代码,当您
在for循环中打印(soup)
时,您会得到以下结果:


403-禁止:访问被拒绝。
服务器错误
403-禁止:访问被拒绝。
您没有使用您提供的凭据查看此目录或页面的权限。

我能够基于此线程修复自己的代码

修复后的我的代码:

import pandas as pd
import re
from bs4 import BeautifulSoup as bs
import requests
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
          'Upgrade-Insecure-Requests': '1', 'Cookie': 'v2=1495343816.182.19.234.142', 'Accept-Encoding': 'gzip, deflate, sdch',
           'Referer': "http://finviz.com/quote.ashx?t="}

def get_fundamental_data(df):
    for symbol in df.index:
        try:      
            #url = ("http://finviz.com/quote.ashx?t=" + symbol.lower())
            r = requests.get("http://finviz.com/quote.ashx?t="+ symbol.lower(),headers=headers)
            soup = bs(r.content,'html.parser') 
            for m in df.columns:                
                df.loc[symbol,m] = fundamental_metric(soup,m)                
        except Exception as e:
            print (symbol, 'not found')
            print(e)
    return df


def fundamental_metric(soup, metric):
    return soup.find(text=metric).find_next(class_='snapshot-td2').text

# Define A List Of Stocks And The Fundamental Metrics

stock_list = ['AMZN', 'GOOG','ABC']
metric = ['P/B',
          'P/E',
          'Forward P/E'
          ]

df = pd.DataFrame(index=stock_list, columns=metric)
df = get_fundamental_data(df)
df.head()
@穆拉里

你的代码非常好,我有一个问题:如果我能从excel表格中导入符号,对我来说会更好。对于你的函数和下面的代码,我没有数据。在test.xlsx中,我只有一列带有符号:

import pandas as pd
from pandas_datareader import data as pdr
import os
from pandas import ExcelWriter
from bs4 import BeautifulSoup as bs
import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
          'Upgrade-Insecure-Requests': '1', 'Cookie': 'v2=1495343816.182.19.234.142', 'Accept-Encoding': 'gzip, deflate, sdch',
           'Referer': "http://finviz.com/quote.ashx?t="}

def get_fundamental_data(df):
    for symbol in df.index:
        try:      
            r = requests.get("http://finviz.com/quote.ashx?t="+ symbol.lower(),headers=headers)
            soup = bs(r.content,'html.parser') 
            for m in df.columns:                
                df.loc[symbol,m] = fundamental_metric(soup,m)                
        except Exception as e:
            print (symbol, 'not found')
            print(e)
    return df


def fundamental_metric(soup, metric):
    return soup.find(text=metric).find_next(class_='snapshot-td2').text

# Define A List Of Stocks And The Fundamental Metrics

#stock_list = ['AMZN', 'GOOG','ABC']
filein = "test.xlsx"
stocklist = pd.read_excel(filein)
metric = ['Symbol','Company','Sector','Market Cap','Shs Float','Insider Own','Market Cap',
          'Shs Float''Insider Own','P/B','P/E','Forward P/E','PEG','Debt/Eq','EPS (ttm)','Dividend %',
          'ROE','ROI','EPS Q/Q','Price','Prev Close','SMA20','SMA50','SMA200','Perf Half Y','Perf Month',
          'Perf Quarter','Perf Week','Perf YTD','Perf Year']

df = pd.DataFrame(data=stocklist,columns=metric)
df = get_fundamental_data(df)
df.head()

错误在哪里?AMZN not found“NoneType”对象没有“find_next”属性。对于上个月代码运行的每个股票,都会收到相同的错误。这是ref网站:我有FinViz网站证书。但是我如何在代码中输入它呢?谢谢您的帮助。请尝试在此处添加用户名和密码:
requests.get(url,auth=('user\u name','password'))
我尝试在函数之前声明我的用户和密码。但是没有运气。或者,您能给我更多关于我可以在哪里添加这些凭据的详细信息吗?请阅读以下内容: