Ошибка атрибута со списком биржевых тикеров - PullRequest
0 голосов
/ 16 июня 2019

Я немного озадачен тем, почему я получаю ошибку атрибута.Эта ошибка возникает только тогда, когда я ставлю список, равный stock_list.Если я распечатываю список, затем копирую и вставляю, я не получаю сообщение об ошибке /

Я пытался ввести технические тикеры в верхней части кода, но при попытке получить ошибку атрибута, чего не происходиткогда у меня есть список печати, затем скопируйте и вставьте, что должно быть то же самое?

file = 'techtickerlist.csv'
with open(file) as f:
    reader = csv.reader(f)
    technologyTickers = []
    for row in reader:
        technologyTickers.append(row[0])

def scrape(stock_list, interested, technicals):
    SuggestedStocks = []
    for each_stock in stock_list:
        try:
            technicals = scrape_yahoo(each_stock)
            condition_1 = float(technicals.get('Return on Equity',0).replace('%','').replace('N/A','-100').replace(',','')) > 25
            condition_2 = float(technicals.get('Trailing P/E',0).replace('N/A','0').replace(',','')) < 25
            condition_3 = float(technicals.get('Price/Book',0).replace('N/A','100')) <8
            condition_4 = float(technicals.get('Beta (3Y Monthly)',0).replace('N/A','100')) <1.1
            if condition_1 and condition_2 and condition_3 and condition_4:
                print(each_stock)
                SuggestedStocks.append(each_stock)  
                for ind in interested: 
                    print(ind + ": "+ technicals[ind])         
                print("------")
                time.sleep(1)   
        except ValueError:
                print('Value Error')
                return
                                              # Use delay to avoid getting flagged as bot
    #return technicals
    print(SuggestedStocks)


def main():

    stock_list = technologyTickers
    interested = ['Return on Equity', 'Revenue', 'Quarterly Revenue Growth','Trailing P/E', 'Beta (3Y Monthly)','Price/Book']
    technicals = {}

    tech = scrape(stock_list, interested, technicals)
    print(tech)

AttributeError: у объекта 'int' нет атрибута 'replace'

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Проверьте вашу реализацию

technicals.get ('Return on Equity', 0)

Метод get (для типа dict) вернет значение по умолчанию 0, если ключ отсутствует. И по вашей реализации все значения по умолчанию имеют тип int. Потому что они были заданы как число, а не как строка (заключенная в кавычки).

Если ноль является правильным значением по умолчанию, вы можете пропустить ошибку при изменении типа и сохранить реализацию.

technicals.get ('Return on Equity', '0')

0 голосов
/ 19 июля 2019

Я думаю, что это будет делать то, что вы хотите.

import csv
import requests
from bs4 import BeautifulSoup

url_base = "https://finviz.com/quote.ashx?t="
tckr = ['SBUX','MSFT','AAPL']
url_list = [url_base + s for s in tckr]

with open('C:\\Users\\Excel\\Downloads\\SO.csv', 'a', newline='') as f:
    writer = csv.writer(f)

    for url in url_list:
        try:
            fpage = requests.get(url)
            fsoup = BeautifulSoup(fpage.content, 'html.parser')

            # write header row
            writer.writerow(map(lambda e : e.text, fsoup.find_all('td', {'class':'snapshot-td2-cp'})))

            # write body row
            writer.writerow(map(lambda e : e.text, fsoup.find_all('td', {'class':'snapshot-td2'})))            
        except HTTPError:
            print("{} - not found".format(url))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...