BeautifulSoup Scrapping Span类HTML

时间:2016-06-16 21:01:17

标签: python html web-scraping beautifulsoup

我想从<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>

我需要获得的是</span>标记之后的那些数字。我还要提一下,我正在编写一个更大的代码来删除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

我知道会打印所有&#39; span类&#39;标签,而不只是我想要的三个,但我想我仍然会测试它,看它是否有效,我得到了这个错误:

  

/Library/Python/2.7/site-packages/bs4/element.py:1527:UserWarning:   has_key已弃用。请改用has_attr(&#34; class&#34;)。密钥))

2 个答案:

答案 0 :(得分:0)

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

希望它有所帮助。

西蒙

答案 1 :(得分:0)

您可以按属性{'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