python - 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' ...]"
解决方案
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={}")
推荐阅读
- django - 使用 DRF 进行不同的写入和读取操作
- excel - 在 Excel 中创建“映射”并使用它根据另一列中的现有数据填充一列
- html - 如何在 Ruby on Rails 中以正确的方式将参数从视图传递到控制器
- html - 视频加载缓慢,没有明显原因
- java - 为我的paintcomponent Graphics 添加一个滚动条,使我的 JFrame 可滚动
- linux - 在 bash shell 中使用 tail
- c++ - 我的代码段有时会运行,有时会抛出错误。我的内存编程有问题吗?代码是怎么回事?
- javascript - 是否可以在减速器中使用 getState() ?
- java - 我在 ubuntu 18.4 中安装 tomcat 时遇到问题
- javascript - 条件语句无法正常运行