У меня возникли проблемы с корректной работой кодирования / декодирования приложения, которое я разрабатываю со следующими компонентами:
- Python 3.6
- BeautifulSoup
- Удаленная веб-страница с использованием UTF-8
- MySQL
- json
- Lambda
Когда я получаю данные в интерфейс (Alexa), в некоторых случаях он включает символы Юникода (например, \ u00e2 \ u0080).Любая помощь будет принята с благодарностью !!!
Вот фрагменты кода из всего конвейера:
Исходная веб-страница: Checked document.characterSet в Chrome Developer Tools
У меня есть код Python / BeautifulSoup:
from bs4 import BeautifulSoup
import pymysql
if page_response.status_code == 200:
page_content = BeautifulSoup(page_response.content, "html.parser")
if str(page_content.find(attrs={'id': 'main'})).find(page_test) != -1:
for table_row in page_content.select("div#page_filling_chart center table tr"):
cells = table_row.findAll('td')
if cells:
records += 1
bo_entry.title = cells[2].text.strip()
Ввод данных в базу данных с помощью:
connection = pymysql.connect(
host=rds_host,
user=name,
password=password,
db=db_name
)
try:
with connection.cursor() as cursor:
# UPSERT: https://chartio.com/resources/tutorials/how-to-insert-if-row-does-not-exist-upsert-in-mysql/
sql = (
f"REPLACE INTO weekend_box_office(weekend_date, market, title_id, title,gross,total_gross,rank_order, previous_rank, distributor, distributor_id, change_pct, theaters, per_theater, week_in_release, gross_num, total_gross_num)"
f"VALUE(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);"
)
data = (
bo_entry.weekend, bo_entry.market, bo_entry.title_id, bo_entry.title, bo_entry.gross, bo_entry.total_gross,
bo_entry.rank, bo_entry.previous_rank, bo_entry.distributor, bo_entry.distributor_id, bo_entry.change_pct, bo_entry.theaters,
bo_entry.per_theater, bo_entry.weeks_in_release, bo_entry.gross_num, bo_entry.total_gross_num
)
# print(sql)
Текущая сортировка базы данных и набор символов установлены на: ![Database Character Set](https://i.stack.imgur.com/l6Icg.png)
Сортировка таблиц MySQL, в которой хранятся данные, такова:
Я выбираю данные из базы данных, используя этот код Python 3.6:
connection = pymysql.connect(
host=rds_host,
user=name,
password=password,
db=db_name
)
with connection.cursor() as cursor:
sql = (
f"select weekend_date, title_id, title, gross, gross_num, total_gross, total_gross_num, CONCAT(cast(ROUND(gross_num / total_gross_num * 100,1) as CHAR),'%') as weekend_pct, week_in_release "
"from weekend_box_office "
f"where weekend_date = '{weekend_text}' "
f"order by gross_num desc limit {limit_row_no}; "
)
try:
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
title = row[2]
Вот как это выглядит, когда я ставлю точку останова и проверяю ее в Проводнике переменных Spyder.
Когда я его возвращаю, это выглядит так: ![Returned as Str](https://i.stack.imgur.com/WnUio.png)
с использованием этого кода: response_text + = (f "во главе с {title} вытягиванием $ {SpeechUtils.spoken_human_format (gross_num)}. ") return response_text
Когда я возвращаю его из Lambda с помощью библиотеки Python json, это выглядит так:
return {'statusCode': 200, 'body': json.dumps (speak_top5 (BoxOffice.get_previous_friday ())), 'headers': {'Content-Type': 'application / json', 'Access-Control-Allow-Origin ':' * '},