Неправильный тип класса с оффлайн-HTML-файлами для обработки через BeautifulSoup - PullRequest
0 голосов
/ 13 апреля 2019

Пытаюсь разобрать HTML-файлы, используя BeautifulSoup и python. Файлы загружаются с HTML-сайтов, поэтому они находятся в автономном режиме. Например, исходный код этой страницы: http://forum.pcgames.de/offizielle-ankuendigungen/9332445-videoforen-unterbereich-jetzt-geoeffnet-print.html

Вместо анализа файлов появляется ошибка AttributeError '_io.TextIOWrapper' object has no attribute 'text'. Я предполагаю, что переменная page имеет неправильный тип класса. Как я могу сделать переменную способной обрабатываться с Beautifulsoup?

Я сравнил процесс с HTML-сайтами, которые загружаются в скрипт по запросу. Кажется, у них другой тип класса <class 'requests.models.Response'>. Тип класса переменной page (см. Ниже): <class 'str'>.

Я открываю файл в python, используя

path = open('test.html', 'r')
page = path.read()
path.close

Я пытаюсь обработать на нем HTML-парсер Beautifulsoup:

from bs4 import BeautifulSoup
soup = BeautifulSoup(page.text, 'html.parser')

Появляется следующая ошибка:

AttributeError: 'str' object has no attribute 'text'

Я не ожидал ошибки в этой строке кода. На самом деле не должно быть выхода.

1 Ответ

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

У вас уже есть строка для работы. Передайте page переменную direct.

from bs4 import BeautifulSoup as bs
path = open(r'C:\Users\User\Desktop\Videoforen-Unterbereich jetzt geöffnet.html', 'r')  #path = open(r'test.html', 'r')
page = path.read()
path.close

soup = bs(page, 'lxml')
print(soup)

Я бы использовал синтаксис with для обработки закрытия, а codecs для сохранения кодировки специальных символов:

from bs4 import BeautifulSoup as bs
import codecs

path = r'C:\Users\User\Desktop\Videoforen-Unterbereich jetzt geöffnet.html'
with codecs.open(path, 'r', 'utf-8') as f:
    page = f.read()    
soup = bs(page, 'lxml')
print(soup)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...