BeautifulSoup返回整个html,而不是我选择的内容

时间:2019-02-06 08:49:16

标签: python beautifulsoup

这真的很新,所以这可能不是问题,但我找不到任何东西。我的代码输出整个html,而不是我设置要返回的内容。

我一直在解决遇到的问题,但是我似乎找不到任何解决办法。

from bs4 import BeautifulSoup  
soup =
BeautifulSoup(open("Watch List.html", encoding='utf-8'), 'html.parser')

section = soup.find('div', attrs={'class':'content'})
results = section.find_all('div', attrs={'class':'item watching'})+section.find_all('div', attrs={'class':'item watched'})
results = soup.prettify().splitlines()
print(results)

1 个答案:

答案 0 :(得分:1)

您所做的完全错误!!! 在BeautifulSoup中,find()返回单个元素,而find_all()返回列表,即使列表仅包含一项。在您的代码中,

section.find_all('div', attrs={'class':'item watching'})

应该返回一个列表,该列表与您的第二个find_all

连接
section.find_all('div', attrs={'class':'item watched'})

也应该抛出一个列表,但是不会,因为您做错了。应该是soup.find_all()而不是section.find_all(),因为section不是初始化对象,而soup不是初始化对象。

最后,soup.prettify()将返回整个页面,因为您在此处设置了解析器。

您的代码应如下所示:

from bs4 import BeautifulSoup 
soup = BeautifulSoup(open("Watch List.html", encoding='utf-8'), 'html.parser')
# soup.find() returns a single element
section = soup.find('div', attrs={'class':'content'})
# this will print out the <div class="content" ...>
print(section)
# soup.find_all() returns a list
results = soup.find_all('div', attrs={'class':'item watching'})+soup.find_all('div', attrs={'class':'item watched'}) 
# the above line returns a list, so you'll have to iterate it over:
for result in results:
    res = result.prettify()
    # prints out prettified stuff one by one
    print(res)
    # print(res+"\n\n")