ul中有3个li元素。 Beautuful Soup没有在li元素中显示文本。 3 li元素包含学院的位置,电话号码和传真号码。
<ul>
<li class="spacer">
<span>
Location:
</span>
<br></br>
1500 S. 1st Avenue
<br></br>
Yuma, AZ 85364
</li>
<li class="spacer">
<span>
Phone Number:
</span>
<br></br>
928-373-4700
</li>
<li class="spacer">
<span>
Fax Number:
</span>
<br></br>
928-343-8864
</li>
我的脚本是:
import urllib2
from bs4 import BeautifulSoup
url = "http://www.policelocator.com/az/yuma-police-department/"
text = urllib2.urlopen(url).read()
soup = BeautifulSoup(text)
data = soup.findAll('li',attrs={'class':'spacer'})
print data[0]
输出结果为:
<li class="spacer"><span>Location:</span> </li>
我可以访问特定的li元素,但没有位置数据。由于某种原因,它被省略了。
任何帮助将不胜感激。
答案 0 :(得分:1)
与BeautifulSoup
的版本无关 - 它与differences between underlying parsers BeautifulSoup
使用有关:
Beautiful Soup为许多不同的界面提供相同的界面 解析器,但每个解析器都不同。不同的解析器将创建 来自同一文档的不同解析树。
演示:
>>> soup = BeautifulSoup(text, 'html.parser')
>>> print soup.find('li', attrs={'class': 'spacer'})
<li class="spacer"><span>Location:</span> </li>
>>> soup = BeautifulSoup(text, 'html5lib')
>>> print soup.find('li', attrs={'class': 'spacer'})
<li class="spacer"><span>Location:</span> <br/>1500 S. 1st Avenue<br/>Yuma, AZ 85364</li>
>>> soup = BeautifulSoup(text, 'lxml')
>>> print soup.find('li', attrs={'class': 'spacer'})
<li class="spacer"><span>Location:</span> 1500 S. 1st AvenueYuma, AZ 85364</li>
如您所见,不同的解析器 - 结果不同。
如果您未明确指定解析器,BeautifulSoup
will choose the best one:
如果您没有指定任何内容,您将获得最佳的HTML解析器 安装。然后,Beautiful Soup将lxml的解析器列为最佳解析器 html5lib,然后是Python的内置解析器。
答案 1 :(得分:0)
我不确定您使用的BeautifulSoup的版本。在我的使用BeautifulSoup4.3.2和Py2.7的机器中,输出是
<li class="spacer"><span>Location:</span> 1500 S. 1st AvenueYuma, AZ 85364</li>