Веб Python, выскабливающий греческие буквы, не показан - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь научиться автоматизировать задачи с помощью python3. Прямо сейчас я пытаюсь открыть веб-сайт, получить от него элемент, а затем перенести его текст в таблицу слов в виде нового абзаца, используя модули запросов, docx и bs4. Все это прекрасно работает, но на сайте есть несколько греческих букв. Когда я пытаюсь открыть список слов, цифры и т. Д. В порядке, но греческие буквы кажутся неправильными (все они отображаются как Öéëïá и т. Д.). Как я могу решить эту проблему?? Вот мой код:

import requests, docx, bs4
doc = docx.Document()
res=requests.get(“http://www.betcosmos.com/index.php?page=kouponi_stoixima”)
soup =bs4.BeautifulSoup(res.text, “lxml”)
elem =soup.select(“.kouponi_table”)
doc.add_paragraph(elem[0].getText())
doc.save(“BetMasterData.docx”)

Заранее спасибо за ваше время

1 Ответ

0 голосов
/ 14 мая 2018

Читая документацию запросов, мы сталкиваемся с этим, относительно содержания ответа. Запросы 2.18.4 Документация - Содержание ответа

Содержание ответа

Мы можем прочитать содержимое ответа сервера. Рассмотрим временную шкалу GitHub снова:

запросы на импорт

r = reports.get ('https://api.github.com/events')

r.text и '[{ "хранилище": { "open_issues": 0, "URL": "https://github.com/...

Запросы автоматически декодируют контент с сервера. Большинство кодировок Юникода легко декодируются.

Когда вы делаете запрос, Requests делает обоснованные предположения о кодировке ответа на основе заголовков HTTP. Кодировка текста, угаданная запросами, используется при доступе к r.text. Вы можете узнать, что использует Requests для кодирования, и изменить его, используя свойство r.encoding:

r.encoding 'UTF-8' r.encoding = 'ISO-8859-1'

Если вы измените кодировку, Requests будет использовать новое значение r.encoding при каждом вызове r.text. Возможно, вы захотите сделать это в любой ситуации, когда вы можете применить специальную логику, чтобы определить, какой будет кодировка контента. Например, HTML и XML имеют возможность указать свою кодировку в своем теле. В подобных ситуациях вы должны использовать r.content для поиска кодировки, а затем установить r.encoding. Это позволит вам использовать r.text с правильной кодировкой.

Запросы также будут использовать пользовательские кодировки, если они вам нужны. Если вы создали свою собственную кодировку и зарегистрировали ее в модуле кодеков, вы можете просто использовать имя кодека в качестве значения r.encoding, а запрос будет обрабатывать декодирование для вас.

Двоичный ответ

Вы также можете получить доступ к телу ответа в байтах для нетекстовых запросов:

r.content б '[{ "хранилище": { "open_issues": 0, "URL": "https://github.com/...

Кодировки передачи gzip и deflate автоматически декодируются для вас.

Попробуйте вместо этого:

import requests, docx, bs4

doc = docx.Document()
res = requests.get('http://www.betcosmos.com/index.php?page=kouponi_stoixima')
soup = bs4.BeautifulSoup(res.content, 'lxml')
elem = soup.select('.kouponi_table') 
doc.add_paragraph(elem[0].getText())
doc.save('BetMasterData.docx')`
...