【问题标题】:Text before <span> flag<span> 标志之前的文本
【发布时间】:2015-11-13 18:52:50
【问题描述】:

这是我的第一个 BS 编码实验。
我正在抓取的网站是here
我遇到的问题是这段代码:

<div class="cmg_team_name">
            ARST
            <span>101</span>
</div>  

这是我的代码:

import numpy as np
from bs4 import BeautifulSoup
import urllib2

url = "http://covers.com/Sports/NCAAF/Matchups?selectedDate=2015-10-13"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read(), 'html.parser')
universities = soup.find_all('div',{'class':'cmg_team_name'})

#for university in universities:
#    print university.contents
#    print "****************"
print universities[0]

我的问题是如何仅访问跨度标志之前的文本。在这个例子中,我只想要ARST。 我试过print universities[0].get_text()print universities[0].string 产生None 以及数组表示法。我知道我会如何在 C++ 中做到这一点,但我假设 python/BSoup 会在一行中做到这一点......提前谢谢!

【问题讨论】:

  • 请不要更新您的代码以包含解决方案,因为它会使答案无效。

标签: python web-scraping beautifulsoup


【解决方案1】:

您必须先从 div 中删除 span,然后清除多余的字符,例如空格和回车。

for university in universities:
    span = [span.extract() for span in university('span')]
    univ = university.text.replace(' ','').replace('\r','').replace('\n','')
    print univ

【讨论】:

  • 删除了跨度,谢谢。出于某种原因,replace 语句没有删除空格。我将使用 C++ 查看 ascii 值以了解发生了什么。
  • 我在我的系统中测试了代码。它运作良好。你能告诉我你在使用替换语句后得到的输出吗?
  • 我在问题陈述中添加了一些示例输出。奇怪的是 .strip() 也不能清理空白。
  • 那是因为你写了 university.text 来输出。我会更新我的代码给你一个更好的主意。
  • 非常感谢。我认为 replace() 函数正在替换并且没有返回值。即使当我阅读文档时,我也只是假设是这种情况。我需要阅读 BeautifulSoup 的底层数据结构。
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多