获取<li>标签美丽汤中的数据</li>

时间:2014-08-23 03:12:35

标签: python beautifulsoup

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元素,但没有位置数据。由于某种原因,它被省略了。

任何帮助将不胜感激。

2 个答案:

答案 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>