基于一个包含统计信息的网站,我实施了基本的Web刮擦代码,这是:
导入
导入请求
来自BS4进口美丽的小组
content = requests.g ...
基于一个包含统计信息的网站,我实施了基本的Web刮擦代码,这里是:
import re
import requests
from bs4 import BeautifulSoup
content = requests.get("https://www.geostat.ge/ka/modules/categories/26/samomkhmareblo-fasebis-indeksi-inflatsia")
content = BeautifulSoup(content.content, 'html.parser')
#print(content.prettify())
information = []
for row in content.select('tbody tr'):
for data in row.find_all('td'):
if len(data.text.strip()) != 0:
information.append(data.text.strip())
print(information)
它返回以下信息:
['2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', 'საშუალო წლიური წინა წლის საშუალო წლიურთან', '99.1', '99.5', '103.1', '104.0', '102.1', '106.0', '102.6', '104.9', '105.2', '109.6', '111.9', '102.5', 'დეკემბერი წინა წლის დეკემბერთან', '98.6', '102.4', '102.0', '104.9', '101.8', '106.7', '101.5', '107.0', '102.4', '113.9', '109.8', '100.4'
现在,本文包含“საშუალო”年之前的第一部分,其余的是两个文本之间的通货膨胀,因此我实施了此非常手动的代码:
years = []
average_annual = []
december = []
first_index = information.index('საშუალო წლიური წინა წლის საშუალო წლიურთან')
second_index = information.index('დეკემბერი წინა წლის დეკემბერთან')
for i in range(0, first_index):
years.append(int(information[i]))
print(years)
for i in range(first_index + 1, second_index):
average_annual.append(float(information[i]))
print(average_annual)
for i in range(second_index + 1, len(information)):
december.append(float(information[i]))
print(december)
它显示正确的分离:
[2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023]
[99.1, 99.5, 103.1, 104.0, 102.1, 106.0, 102.6, 104.9, 105.2, 109.6, 111.9, 102.5]
[98.6, 102.4, 102.0, 104.9, 101.8, 106.7, 101.5, 107.0, 102.4, 113.9, 109.8, 100.4]
是否有更优化的方法?
我尝试了此版本:
data = pd.DataFrame(pd.read_html("https://www.geostat.ge/ka/modules/categories/26/samomkhmareblo-fasebis-indeksi-inflatsia", encoding='utf-8')[0])
#data.drop(0, axis=0, inplace=True)
#data = data.droplevel(level=0, axis=1)
print(data)
它返回此结果:
0 1 ... 11 12
0 NaN 2012.0 ... 2022.0 2023.0
1 საშუალო წლიური წინა წლის საშუალო წლიურთან 99.1 ... 111.9 102.5
2 დეკემბერი წინა წლის დეკემბერთან 98.6 ... 109.8 100.4
[3 rows x 13 columns]
如何处理这种情况?