【问题标题】:BeautifulSoup Scraping Span Class HTMLBeautifulSoup 抓取 Span 类 HTML
【发布时间】:2016-06-16 21:01:17
【问题描述】:

我正在尝试从<span class= ''> 中获取信息。我正在抓取的页面上的代码如下所示:

    < span class = "catnum"> Disc Number < / span>
    "1"
    < br >
    < span class = "catnum"> Track Number < / span>
    "1"
    < br>
    < span class = "catnum" > Duration < /span>
    "5:28"
    <br>

我需要得到的是&lt;/span&gt; 标记之后的那些数字。我还应该提到我正在编写一段更大的代码,它正在抓取 1200 个站点,这将不得不循环超过 1200 个站点,其中引号中的数字会因页面而异。

我尝试将此代码作为一页上的测试:

    from bs4 import BeautifulSoup

    soup = BeautifulSoup (open("Smith.html"), "html.parser")

    for tag in soup.findAll('span'):
        if tag.has_key('class'):
            if tag['class'] == 'catnum':
                print tag.string

我知道这将打印所有的“跨度类”标签,而不仅仅是我想要的三个标签,但我想我仍然会测试它是否有效,但我收到了这个错误:

/Library/Python/2.7/site-packages/bs4/element.py:1527:用户警告: has_key 已弃用。请改用 has_attr("class")。键))

【问题讨论】:

  • [span.next_sibling.strip() for span in soup.select("span.catnum")]

标签: python html web-scraping beautifulsoup


【解决方案1】:

如错误消息中所述,您应该使用tag.has_attr("class") 代替已弃用的tag.has_key("class") 方法。

希望对你有帮助。

西蒙娜

【讨论】:

  • 这确实解决了错误,但现在什么都没有打印,所以我不知道它是否抓住了正确的东西。我遇到的另一个问题是我需要引号中的数字而不是文本。
  • 我知道,但是你问了错误的原因,我回答了这个问题。我不明白拇指向下的原因。
  • 不管怎样,问题是'tag['class']`以[u'catnum']的形式返回类名,所以你必须检查那个特定的字符串,或者检查它是否包含字符串你正在寻找。 for tag in soup.findAll('span'): if tag.has_attr('class'): if 'catnum' in tag['class']: print tag.string 这是一个工作示例。
【解决方案2】:

您可以通过属性{'class': 'catnum'}text=re.compile('Disc Number') 中的文本来限制搜索。然后使用.next_sibling查找文字:

from bs4 import BeautifulSoup
import re
s = '''
    <span class = "catnum"> Disc Number </span>
    "1"
    <br/>
    <span class = "catnum"> Track Number </span>
    "1"
    <br/>
    <span class = "catnum"> Duration </span>
    "5:28"
    <br/>'''

soup = BeautifulSoup(s, 'html.parser')
span = soup.find('span', {'class': 'catnum'}, text=re.compile(r'Disc Number'))
print span.next_sibling

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2020-05-19
    相关资源
    最近更新 更多