BeautifulSoup返回一个空字符串?

时间:2016-04-21 18:55:31

标签: python beautifulsoup

我不知道以前是否曾经问过这个问题,但我找不到任何有助于解决问题的方法(希望我没有误解任何事情)。我目前正在学习Python,使用Python 3.5和IPython,我在使用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之后,当我再次尝试读取文件时,它会返回一个空字符串。由于这个原因,我无法定义元素。

我试图理解为什么会这样,但我无法理解,所以我决定发一个问题。

提前致谢!

3 个答案:

答案 0 :(得分:2)

我认为您的问题是多次调用read()。在尝试再次读取文件之前,您应该使用seek(0)回退到文件的开头。 Here is a similar question

答案 1 :(得分: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()时,它会清空&#39;它到屏幕上。然后从该点开始对该文件对象的每个.read()调用都是空的。在我的示例中,我们将其保存为名为myHTML的字符串对象。然后我们从那时起使用myHTML。

注意:调用.read()后,文件对象exampleFile不会为空,只是读取器位于文件的末尾,因此没有任何内容可供阅读。当我学习Python时,空洞的比喻是有人向我解释它并帮助我理解它。

答案 2 :(得分:0)

事实证明,这是因为原始example.html中的奇怪引号。我在另一个文本编辑器中更改了引号的字体(?),结果工作得很好。谢谢你的帮助。真的很感激!