首页 > 解决方案 > 将列表序列转换为字典-python

问题描述

我正在从网站上抓取数据,直到现在,我已经转换为值列表。我希望以字典的形式输出,如果用户输入“open”-“39.30”,如果用户输入“Previous close”,将显示,然后将显示“39.79”。所以我将str类型的文本标签转换为值列表。如何将这些列表转换为字典?

website='https://finance.yahoo.com/quote/AMD?p=AMD&.tsrc=fin-srch-v1'
htmltag = urllib.request.urlopen(website).read()
soups = BeautifulSoup(htmltag,'lxml')
allidtag = soups.find('div', id='YDC-Col1')
alll=allidtag.find_all('table', class_='W(100%)')
for item in alll:
    tablerow=item.find_all('tr')  #I have collected all the tr tags 
    for i in tablerow:
        s=i.find_all('td')#I have found td tags
        for j in s:
            a=j.text   #extracted the span tags
            b=a.split(" ")  #converting to lists
            print(b)
['Previous', 'Close']
['39.79']
['Open']
['39.30']
['Bid']
['39.03', 'x', '3200']
['Ask']
['39.07', 'x', '1100']
["Day's", 'Range']
['38.83', '-', '39.48']
['52', 'Week', 'Range']
['16.03', '-', '41.79']
['Volume']
['42,197,133']
['Avg.', 'Volume']
['52,798,084']
['Market', 'Cap']
['44.394B']

如果我单独打印“a”,则会出现 str 类型的输出:

Previous Close
39.79
Open
39.30
Bid
39.03 x 4000
Ask
39.07 x 1200
Day's Range
38.82 - 39.48
52 Week Range
16.03 - 41.79
Volume
42,197,133
Avg. Volume
52,798,084
Market Cap
44.394B
Beta (3Y Monthly)
3.06
PE Ratio (TTM)
204.14
EPS (TTM)
0.19
Earnings Date
Jan 27, 2020 - Jan 31, 2020
Forward Dividend & Yield
N/A (N/A)
Ex-Dividend Date
1995-04-27
1y Target Est
35.57

标签: python

解决方案


如果我是你,我会完全删除最后一个for循环,如下所示:

key = s[0].get_text()
value = s[1].get_text()
d[key] = value 

回报:

{'Previous Close': '39.79', 'Open': '39.30', 'Bid': '39.03 x 3200', 'Ask': '39.15 x 1100', "Day's Range": '38.83 - 39.48', '52 Week Range': '16.03 - 41.79', 'Volume': '42,197,133', 'Avg. Volume': '52,798,084', 'Market Cap': '44.394B', 'Beta (3Y Monthly)': '3.06', 'PE Ratio (TTM)': '204.14', 'EPS (TTM)': '0.19', 'Earnings Date': 'Jan 27, 2020 - Jan 31, 2020', 'Forward Dividend & Yield': 'N/A (N/A)', 'Ex-Dividend Date': '1995-04-27', '1y Target Est': '35.57'}

您不需要遍历td元素,因为它们的顺序是可预测的。而且我认为没有必要将字符串拆分为列表,因为将它们放在一起更有意义。


推荐阅读