Вставка данных в электронную таблицу с l oop дюйм python - PullRequest
0 голосов
/ 25 мая 2020

Я протестировал небольшой пример, openpyxl работает нормально.

Но у меня проблема в основном проекте.

Есть список страниц, сгенерированных BeautifulSoup, я могу узнать имя и цену активов с функцией печати. Когда я пытаюсь вставить эти данные в файл excel с l oop, программа вылетает, файл создается, но он поврежден.

import requests, sys, bs4, locale, re, openpyxl, os
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
from time import sleep

req = Request('https://coinmarketcap.com/exchanges/beaxy/', headers={'User-Agent': 'Mozilla/5.0'})
html_page = urlopen(req).read()
soup = BeautifulSoup(html_page, 'html.parser')

#preparing an excel file
wb = openpyxl.Workbook()
sheet = wb['Sheet']

#all beaxy exchange listed coins
#coinmarketcap URL pages of these coins
cryptoUrls = []

for url in soup.findAll('a', attrs={'title': True,'href': re.compile("^/currencies/")}):
    cryptoUrls.append('https://coinmarketcap.com' + url.get('href'))

# removing duplicate items
cryptoUrls = list(dict.fromkeys(cryptoUrls))

# Data of coinmarketcap URLs generated by BeautifulSoup
soup_list = []

for coinUrl in cryptoUrls:
    resp = requests.get(coinUrl, headers={'User-Agent': 'Mozilla/5.0'})
    if resp.status_code == 200:
        soup_list.append(bs4.BeautifulSoup(resp.text, 'html.parser'))
        sleep(2)

locale.setlocale(locale.LC_ALL, 'en_US.UTF8')

for idx, cryptoCoin in enumerate(soup_list,start=2):
    rowB = 'B{0}'.format(idx)
    rowC = 'C{0}'.format(idx)
    sheet[rowB] = cryptoCoin.body.h1(string=True)[0].strip()
    sheet[rowC] = locale.atof(cryptoCoin.select('.cmc-details-panel-price__price')[0].text.strip('$'))
else:
    wb.save('testcr.xlsx')

Я не смог найти здесь ошибку. Буду очень рад, если вы поможете с этим.

Спасибо

1 Ответ

0 голосов
/ 26 мая 2020

Единственное исключение, с которым я столкнулся при запуске кода, было

Error: unsupported locale setting

в строке: locale.setlocale(locale.LC_ALL, 'en_US.UTF8')

Я изменил его на locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') (обратите внимание на дефис), и все сработало хорошо. Мне удалось успешно открыть файл Excel.

Моя среда: MacOS, Python 3,8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...