这真的很新,所以这可能不是问题,但我找不到任何东西。我的代码输出整个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)
答案 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")