我正在尝试从网站中提取表格的值,并将数据编译成pandas数据帧。 http://lbma.oblive.co.uk/table 但是,我有几个问题。
我只能在需要所有五个字段时选择默认金价。即金,银,GOFO / LIBOR,铂和钯。
数据输出似乎分阶段不正确。即,它显示为单个数组,而不是网站中正确的行和列。
下面是我尝试进行网页抓取的相当简单的代码,但它对于工作来说相当不足。希望你们能帮忙。
#Import packages
import requests
import pandas as pd
from bs4 import BeautifulSoup
#Define url and output data
url = "http://lbma.oblive.co.uk/table"
data = pd.read_html(requests.get(url).text)
df = pd.DataFrame(data)
print(df)
输出:
0 Timestamp:2018-03-12 10:31:00 +0000 US...
答案 0 :(得分:1)
通过从HTML选项菜单中选择金属类型,可以实现完整的URL:
from bs4 import BeautifulSoup as soup
import urllib
import pandas as pd
metals = map(lambda x:str(x).lower(), [i.text for i in soup(str(urllib.urlopen('http://lbma.oblive.co.uk/table?metal=silver&year=2018&type=daily').read()), 'lxml').find_all('option')])[:5]
dataframes = []
for metal in metals:
table_results = [i.text for i in soup(str(urllib.urlopen('http://lbma.oblive.co.uk/table?metal={}&year=2018&type=daily'.format(metal)).read()), 'lxml').find_all('td')]
new_table_data = {metal:[dict(zip(['timestamp', 'USD', 'GBP', 'EUR'], table_results[i:i+4])) for i in range(0, len(table_results), 4)]}
dataframes.append(pd.DataFrame.from_dict(new_table_results,orient='index').transpose())