Один из способов экспортировать таблицу в CSV будет:
import csv
from bs4 import BeautifulSoup
# import urllib.request as ur
import re
import json
from collections import OrderedDict
# Open output file for writing
outfile = open(r"table_data.csv","w")
# HTML string
# html = ur.urlopen('url')
html = """
<div class="block">
<div class="block-content">
<div class="players" data-countinpage="10" data-pagination="true" id="league-players"></div>
<script>
var playersData = JSON.parse('\x5B\x7B\x22id\x22\x3A\x221250\x22,\x22player_name\x22\x3A\x22Mohamed\x20Salah\x22,\x22games\x22\x3A\x2235\x22,\x22time\x22\x3A\x222869\x22\x7D\x5D');
</script> </div>
</div>
"""
# Extract json string
tree = BeautifulSoup(html,"html.parser")
data = tree.find_all("script")[0].string
pattern = re.compile('var playersData = JSON.parse\(\'(.*)\'\);')
match = pattern.search(data)
json_obj = json.loads(match.group(1), object_pairs_hook=OrderedDict)
# Write header
keys = '"' + '","'.join(json_obj[0].keys()) + '"' + "\n"
outfile.write(keys)
# Write data
for element in json_obj:
values = '"' + '","'.join(element.values()) + '"' + "\n"
outfile.write(values)
Этот код извлекает данные из тега script и анализирует строку json. Сначала он выводит заголовок в файл CSV. Затем он выводит каждую запись в отдельный ряд в файл CSV.
Когда программа запускается, файл csv будет иметь такой вывод:
"id","player_name","games","time"
"1250","Mohamed Salah","35","2869"
Примечание. Приведенный выше код был протестирован с использованием Python версии 2.7.10.