There is a [text][1] (link clickable) file with HTML table. The table is a bank statement. I'd like to parse it into pandas DataFrame. Is there a way to do it more gracefully? from bs4 import BeautifulSoup import pandas as pd with open("sber2.txt", "r", encoding = "UTF8") as f: context = f.read() soup = BeautifulSoup(context, 'html.parser') rows_dates = soup.find_all(attrs = {'data-bind':'momentDateText: date'}) rows_category = soup.find_all(attrs = {'data-bind' : 'text: categoryName'}) rows_comment = soup.find_all(attrs = {'data-bind' : 'text: comment'}) rows_money = soup.find_all(attrs = {'data-bind' : 'currencyText: nationalAmount'}) dic = { "dates" : [], "category" : [], "comment": [], "money" : [] } i = 0 while i < len(rows_dates): dic["dates"].append(rows_dates[i].text) dic["category"].append(rows_category[i].text) dic["comment"].append(rows_comment[i].text) dic["money"].append(rows_money[i].text) ''' print( rows_dates[i].text, rows_category[i].text, rows_comment[i].text, rows_money[i].text) ''' i += 1 df = pd.DataFrame(dic) df.info() print(df.head()) Output: RangeIndex: 18 entries, 0 to 17 Data columns (total 4 columns): category 18 non-null object comment 18 non-null object dates 18 non-null object money 18 non-null object dtypes: object(4) memory usage: 656.0+ bytes category comment dates money 0 Supermarkets PYATEROCHKA 1168 SAMARA RU 28.12.2017 -456,85 1 Supermarkets KARUSEL SAMARA RU 26.12.2017 -710,78 2 Supermarkets PYATEROCHKA 1168 SAMARA RU 24.12.2017 -800,24 3 Supermarkets AUCHAN SAMARA IKEA SAMARA RU 19.12.2017 -154,38 4 Supermarkets PYATEROCHKA 9481 SAMARA RU 16.12.2017 -188,80 [1]: https://drive.google.com/file/d/1jmxNI7FymUYcVhPR2xp6qmAkZHUBvXgw/view?usp=sharing