从美式汤上的“导航字符串”和“标签”类型中拉出文本

时间:2016-11-22 18:38:04

标签: python beautifulsoup

我一直在解析Rotten Tomatoes网站的一部分,该网站将评论家评分作为标记,并将“%”分开。我遵循了一些SO建议,例如使用find_all('span',text="true"),但Python 3.5.1 shell返回了这个错误:AttributeError: 'NavigableString' object has no attribute 'find_all'我也尝试找到Beautiful Soup对象critiscore的直接子节点,但是收到了相同的错误。请告诉我哪里出错了。这是我的python代码:

def get_rating(address):
    """pull ratings numbers from rotten tomatoes"""
    RTaddress = urllib.request.urlopen(address)
    tomatoe = BeautifulSoup(RTaddress, "lxml")
    for criticscore in tomatoe.find('span', class_=['meter-value superPageFontColor']):
        print(''.join(criticscore.find_all('span', recursive=False))) #print the Tomatometer

另外,这里是关于烂番茄的代码我很感兴趣:

<div class="critic-score meter">
                        <a href="#contentReviews" class="unstyled articleLink" id="tomato_meter_link">
                            <span class="meter-tomato icon big medium-xs certified_fresh pull-left"></span>
                            <span class="meter-value superPageFontColor"><span>96</span>%</span>
                        </a>
                    </div>

1 个答案:

答案 0 :(得分:2)

问题在于:

for criticscore in tomatoe.find('span', class_=['meter-value superPageFontColor']):

在这里,您通过find()定位单个元素,然后遍历其子节点,子节点可以是文本节点以及其他元素(当您遍历元素时,这是{{1 }})。

相反,您可能打算使用BeautifulSoup代替find_all()

find()

或者,您可以使用单个CSS selector代替:

for criticscore in tomatoe.find_all('span', class_=['meter-value superPageFontColor']):

其中for criticscore in tomatoe.select('span.meter-value > span'): print(criticscore.get_text()) 表示直接的父子关系(这是您的>替换)。