首页 > 解决方案 > BeautifulSoup webscrape .asp 只搜索列表中的最后一个

问题描述

def get_NYSE_tickers():

 an = ['A', 'B', 'C', 'D', 'E', 'F', 'H', 'I', 'J', 'K', 'L',
       'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
       'X', 'Y', 'Z', '0']

 for value in an:
     resp = requests.get(
         'https://www.advfn.com/nyse/newyorkstockexchange.asp?companies={}'.format(value))
     soup = bs.BeautifulSoup(resp.text, 'lxml')
     table = soup.find('table', class_='market tab1')
     tickers = []
     for row in table.findAll('tr', class_='ts1',)[0:]:
         ticker = row.findAll('td')[1].text
         tickers.append(ticker)
     for row in table.findAll('tr', class_='ts0',)[0:]:
         ticker = row.findAll('td')[1].text
         tickers.append(ticker)
     with open("NYSE.pickle", "wb") as f:
         while("" in tickers):
             tickers.remove("")
         pickle.dump(tickers, f)

 print(tickers)


get_NYSE_tickers()

我的问题是,当我运行这个脚本时,我的输出只是“0”页面中包含的数据。它始终是列表中的最后一个值。

另外我想知道是否有办法结合

for row in table.findAll('tr', class_='ts1',)[0:]:
         ticker = row.findAll('td')[1].text
         tickers.append(ticker)
     for row in table.findAll('tr', class_='ts0',)[0:]:
         ticker = row.findAll('td')[1].text
         tickers.append(ticker)

进入一个代码块,因为 class_='ts0','ts1' 似乎不太明白。

我想查看 https://www.advfn.com/nyse/newyorkstockexchange.asp?companies=A、https://www.advfn.com/nyse/newyorkstockexchange.asp?companies=B、https中的 所有股票代码://www.advfn.com/nyse/newyorkstockexchange.asp?companies=C等等等等。

在单个泡菜或 csv 文件中:

“['AVX', 'AHC', 'RNT', 'AAN', 'AXF', 'DVK', 'RCW', 'SAD', 'ABB', 'ANF', 'ABM', 'IMW', 'SZM'、'SZI'、'ICT'、'ACN'、'ABD'、'ATN'、'AYI'、'AEA'、'ASX'、'ACM'、'AEG'、'AEB'、'AEH ','AET','AMG','AG','A','ADC','AGU','APD','ARG','AQD','ALZ','ALF','ALK', 'ALB'、'ALU'、'ACL'、'AXB'、'ARE'、'AYE'、'AGN'、'AMO'、'ADS'、'AOI'、'AZM'、'AIB'、'ALY '、'ALM'、'ALJ'、'AWP'、'AMB'、'AKT'、'ACO'、'HES'、'AMX'、'ACC'、'AEP'、'AXP'、'AFE'、'AIG'、'AVF'、'AOB'、'ARP'、'AWR'、'AVD'、'ACF'、'AGP ','AMN','AHS','AP','AXR','AU','NLY','ATV','ANH','APA','AIT','WTR','ARB', 'ARJ'、'ADM'、'AWI'、'ARM'、'AHT'、'AHL'、'AGO'、'AZN'、'ATO'、'ATT'、'AUO'、'AN'、'NEH ','AVR','AXA','AZZ','AKS','AAR','AIR','RNT.A','AAN.A','CBJ','SQT','IWK', 'EOA'、'REU'、'MHG'、'ABT'、'AKR'、'BJV'、'ODY'、'RDF'、'MKY'、'BFN'、'ACE'、'ATU'、'ADX'、'ASF'、'AAP'、'AEO'、'AEV'、'AED'、'AER'、'AES'、'ACS ','AFL','AGCO','AEM','GRO','NOW','AYR','AAI','ALQ','ABA','ALG','AIN','ACV', 'AA'、'AFN'、'ALX'、'Y'、'ATI'、'ALE'、'AB'、'AZ'、'AFC'、'ALL'、'ANR'、'MO'、'ACH ','ABK','AKF','AEE','AXL','ADY','AEL','AFG','AM','AFF','ANL','ARL','ASI', 'AMT'、'AWK'、'APU'、'ABC'、'AME'、'AMP'、'APH'、'APC'、'AGL'、'AXE'、'AHR'、'AOC'、'AIV'、'ATR'、'ARA'、'ABR'、'ACI'、'ARD'、'ARW'、'ABG' 、'ASH'、'ALC'、'AIZ'、'AF'、'ATG'、'AHD'、'T'、'ATW'、'ALV'、'AZO'、'AVB'、'AVY'、' AVA'、'AVP'、'AXS' ...]"

标签: pythonasp.netbeautifulsoup

解决方案


import requests
from bs4 import BeautifulSoup
from string import ascii_uppercase
import pandas as pd


goals = list(ascii_uppercase)


def main(url):
    with requests.Session() as req:
        allin = []
        for goal in goals:
            r = req.get(url.format(goal))
            df = pd.read_html(r.content, header=1)[-1]
            target = df['Symbol'].tolist()
            allin.extend(target)
    print(allin)


main("https://www.advfn.com/nyse/newyorkstockexchange.asp?companies={}")

推荐阅读