【问题标题】:Select specific text from specific span从特定范围中选择特定文本
【发布时间】:2016-10-20 15:59:49
【问题描述】:

我正在尝试使用 python 来抓取 TripAdvisor 并从特定范围中提取文本 ---> <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 时,它说没有文本,当我将其更改为 find 而不是 find all 时,它只会找到第一个跨度。

【问题讨论】:

  • 你是如何下标/索引的?对我来说rate1.findAll('span')[2].text 给了我'138\n'。
  • 哦!哇,太好了。我把下标放在 findAll 之后。所以 rate1.findAll[2]('span').text
  • 太棒了!我已将其转换为答案,以便其他人更容易看到对您有用的解决方案,因此这显示为带有有效解决方案的问题。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多