Python 网络抓取的 while 循环错误,相同数据出现 5 次

Python while loop error with web scraping, same data appearing 5x times

在加入while循环之前,输出将输出所有100家公司的数据。所以我创建了一个 while 循环来只显示前五家公司。然而现在它只显示第一家公司五次。有什么帮助吗?提前致谢!

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome(executable_path='C:\Program Files (x86)\chromedriver.exe')
    driver.get("https://www.tradingview.com/markets/stocks-usa/market-movers-active/")
    
    class most_active_stock():
        def __init__(self):
            main = WebDriverWait(driver, 10).until(
                EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".tv-data-table__tbody .tv-data-table__row.tv-data-table__stroke.tv-screener-table__result-row")))
            self.companies = driver.find_elements_by_css_selector(".tv-data-table__tbody .tv-data-table__row.tv-data-table__stroke.tv-screener-table__result-row")
            self.result = []
            self.index = 0
    
        def getdata(self):
            for company in self.companies:
                name_short = company.find_element_by_css_selector(".tv-screener__symbol.apply-common-tooltip").text
                name_long = company.find_element_by_css_selector(".tv-screener__description").text
                last = company.find_element_by_css_selector(".tv-data-table__cell.tv-screener-table__cell.tv-screener-table__cell--big.tv-screener-table__cell--with-marker:nth-of-type(2)>span").text
                self.result.append([name_short, name_long, last])
    
        def printdata(self):
            print("MOST ACTIVE STOCKS:", sep='\n')
            for p in self.result:
                while self.index < 5:
                    print(p, sep='\n')
                    self.index += 1
    
    activeStock = most_active_stock()
    
    if __name__ == "__main__":
        activeStock.getdata()
        activeStock.printdata()

    #Output:
    #MOST ACTIVE STOCKS:
    #['GERN', 'GERON CORPORATION', '1.83']
    #['GERN', 'GERON CORPORATION', '1.83']
    #['GERN', 'GERON CORPORATION', '1.83']
    #['GERN', 'GERON CORPORATION', '1.83']
    #['GERN', 'GERON CORPORATION', '1.83']

我认为问题出在这部分代码中:

def printdata(self):
    print("MOST ACTIVE STOCKS:", sep='\n')
    for p in self.result:
        while self.index < 5:
            print(p, sep='\n')
            self.index += 1

因此内部 while 循环执行直到 self.index 等于 5,并且在此过程中它打印相同的 'p' 5 次。

根据您组织数据的方式(在 self.result 中看起来是以列表的形式),您可能会这样做:

def printdata(self):
    print("MOST ACTIVE STOCKS:", sep='\n')
    while self.index < 5:
        print(self.result[self.index], sep='\n')
        self.index += 1