2016-04-21 12 views
0

Я не знаю, был ли задан этот вопрос раньше, но я не мог найти ничего, что могло бы помочь решить мою проблему (надеюсь, я ничего не понял). Я изучаю Python в данный момент, используя Python 3.5 с IPython, и у меня возникли проблемы с использованием BeautifulSoup. Как показано ниже,BeautifulSoup возвращает пустую строку?

import bs4 
exampleFile = open('example.html') 
exampleFile.read() 
>>> '<html><head><title>The Website Title</title></head>\n<body>\n<p>Download my <strong>Python</strong> book from <a href=“http://inventwithpython.com”>my website</a>.</p>\n<p class=“slogan”>Learn Python the easy way!</p>\n<p>By <span id=“author”>Al Sweigart</span></p>\n</body></html>' 
exampleSoup = bs4.BeautifulSoup(exampleFile.read(), 'html.parser') 
exampleFile.read() 
>>> '' 
elems = exampleSoup.select('#author') 
print(elems) 
>>> [] 

Я могу открыть и прочитать example.html, но после того, как я использую BeautifulSoup, когда я пытаюсь снова прочитать файл, он возвращает пустую строку. Из-за этого я не могу определить элем.

Я пытаюсь понять, почему это происходит, но я не мог понять это, поэтому решил отправить вопрос.

Заранее благодарен!

ответ

0

Получается, что это было из-за странных цитат, которые были в оригинале example.html. Я изменил шрифт (?) Кавычек в другом текстовом редакторе, и в итоге он работал нормально. Спасибо за вашу помощь. Действительно ценю это!

2

Я считаю, что в вашей проблеме есть несколько вызовов read(). Вы должны использовать seek(0), чтобы перемотать назад в начало файла, прежде чем пытаться прочитать его снова. Here is a similar question.

+0

Я обновил свой код, чтобы он выглядел как код Керри Хэтчера, но print (exampleSoup) по-прежнему ничего не возвращает, даже пустой список. – mdlee6

0

Danielu13 является правильным. Вот то, что вы хотите сделать:

import bs4 
exampleFile = open('example.html') 
myHTML = exampleFile.read() 
print(myHTML) 
exampleSoup = bs4.BeautifulSoup(myHTML, 'html.parser') 
print(exampleSoup) 
elems = exampleSoup.select('#author') 
print(elems) 

Проблема заключается в том, когда вы звоните .read() на объект файла, это опустошает "на экран. Затем каждый вызов .read() для этого файлового объекта из этой точки пуст. В моем примере мы сохраняем его в строчном объекте с именем myHTML. Затем мы используем myHTML с этого момента.

Примечание: пример файла fileFile не является пустым после вызова .read(), его просто так, что читатель находится в конце файла, поэтому читать нечего. Когда я узнал Python, пустая аналогия - это то, как кто-то объяснил это мне, и это помогло мне понять это.

+0

Теперь я понимаю, что функция read() указывает в конце строки, тем самым показывая «ничего». Я обновил код, похожий на ваш, но я все еще получаю пустой список при попытке печати (elems). Когда я пытаюсь выполнить печать (exampleSoup), ничего не появляется, даже пустой список. Вот ссылка на обновленный код и результаты: https://github.com/mdlee6/bsExample/blob/master/Untitled.ipynb – mdlee6

+0

Проверьте свои аргументы на 'bs4.BeautifulSoup()'. Первым аргументом должен быть HTML, а не файл. – danielunderwood

+0

Я внес изменения, но он все еще пуст: \ https://github.com/mdlee6/bsExample/blob/master/Untitled.ipynb – mdlee6

Смежные вопросы