从特定范围中选择特定文本

时间:2016-10-20 15:59:49

标签: python-3.x web-scraping beautifulsoup

我正在尝试使用python来抓取TripAdvisor并从特定范围中提取文本---&gt; <span>138<span>(没有优秀的)

<label for="taplc_prodp13n_hr_sur_review_filter_controls_0_filterRating_5">
<div class="row_label">Excellent</div>
<span class="row_bar">
<span class="row_fill" style="width:65%;"></span>
</span>
<span>138<span>
</span></span></label>

到目前为止,这是我的代码:

for rating_all in moresoup.findAll('div',{'class':'col rating '}):
    for record in rating_all.findAll('li'):
        for rate1 in record.findAll('label',{'for':"taplc_prodp13n_hr_sur_review_filter_controls_0_filterRating_1"}):
                print(rate1.find('div',{'class':"row_label"}).text + ",\t")
                print(rate1.findAll('span'))

我尝试使用下标,但它不会让我。当我在跨度后使用.text时,它表示没有文本,当我将其更改为查找而不是查找全部时,它只找到第一个跨度。

1 个答案:

答案 0 :(得分:0)

findAll(或更常见的find_all - 它做同样的事情)会返回与您的过滤器匹配的所有Tag个对象的列表。即使只有一个匹配Tag,您仍会获得一个项目列表:[Tag]

获得标签列表后,您可以通过索引获得单个标签,例如:

soup.find_all('span')[0]

您可以使用.text属性获取一个标签的文字:

soup.find_all('span')[0].text

在您的特定情况下,我能够使用以下内容获取文本'138\n'

rate1.findAll('span')[2].text