Как искать определенную строку в кодировке Юникод при утилизации? - PullRequest
2 голосов
/ 01 апреля 2019

Недавно я заинтересовался поиском в сети на Python и сделал это на нескольких простых примерах, но я не знаю, как обращаться с другими языками, которые не следуют кодам ASCII. Например, поиск определенной строки в файле HTML или использование этих строк для записи в файл.

from urllib.parse import urljoin
import requests
import bs4
website = 'http://book.iranseda.ir'
book_url = 'http://book.iranseda.ir/DetailsAlbum/?VALID=TRUE&g=209103'

soup1 = bs4.BeautifulSoup(requests.get(book_url).text, 'lxml')
match1 = soup1.find_all('a', class_='download-mp3')
for m in match1:
    m = m['href'].replace('q=10', 'q=9')
    url = urljoin(website, m)
    print(url)
    print()

Глядя на этот сайт под book_url, каждая строка имеет разный текст, но текст на персидском языке. Допустим, мне нужно рассмотреть последний ряд. Текст "صدای کل کتاب" Как мне найти эту строку в тегах <li>, <div> и <a>?

1 Ответ

0 голосов
/ 01 апреля 2019

Вам необходимо установить кодировку от requests до UTF-8. Похоже, что модуль requests не использовал нужное вам декодирование. Как упомянуто в этом SO сообщении , вы можете указать запросам, какую кодировку ожидать.

from urllib.parse import urljoin
import requests
import bs4
website = 'http://book.iranseda.ir'
book_url = 'http://book.iranseda.ir/DetailsAlbum/?VALID=TRUE&g=209103'

req = requests.get(book_url)
req.encoding = 'UTF-8'
soup1 = bs4.BeautifulSoup(req.text, 'lxml')
match1 = soup1.find_all('a', class_='download-mp3')
for m in match1:
    m = m['href'].replace('q=10', 'q=9')
    url = urljoin(website, m)
    print(url)
    print()

Единственное изменение здесь

req = requests.get(book_url)
req.encoding = 'UTF-8'
soup1 = bs4.BeautifulSoup(req.text, 'lxml')
...