2016-06-16 98 views
-1

我試圖從<span class= ''>報廢。該代碼看起來像這樣的網頁上,我再殺:BeautifulSoup Scrapping Span Class HTML

< 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 

我知道這將打印所有的「跨級」的標籤,而不僅僅是三個我想,但我想我仍然會對其進行測試看它是否工作,我得到這個錯誤:

/Library/Python/2.7/site-packages/bs4/element.py:1527: UserWarning: has_key is deprecated. Use has_attr("class") instead. key))

+0

'[span.next_sibling.strip()在soup.select跨度( 「span.catnum」)]' –

回答

0

在錯誤消息說,你應該取代過時tag.has_key("class")方法的使用tag.has_attr("class")

希望它有幫助。

西蒙娜

+0

這的確得到了錯誤的乘駕,但現在沒有正在印刷,所以我不知道它是否抓住了正確的事情。 我遇到的另一個問題是我需要引號中的數字而不是文本。 –

+0

我知道,但你問錯誤的原因,我回答了這個問題。我不明白拇指向下的原因。 –

+0

無論如何,問題是'tag ['class']'以'[u'catnum']'的形式返回類名,所以你必須檢查特定的字符串,或者檢查它是否包含字符串尋找。 用於soup.findAll標籤( '跨度'):\t 如果tag.has_attr( '類'): 如果標籤 'catnum'[ '類']: \t \t打印tag.string 這裏一工作示例。 –

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