2016-11-10 101 views
0

我試圖編寫一個代碼,通過查找範圍標籤和其中的數字來從HTML中刪除數字。無法解決:TypeError:期望的字符串或緩衝區

我不斷收到錯誤「預期的字符串或緩衝區」。

我讀過一些解決方案,同時通過做不同的問題我的搜索,但是當我嘗試" ''.join(some_list)"我得到另一個錯誤:

"sequence item 0: expected string, Tag found"

試圖尋找那一個,看到了一些解決方案,如使用.get而不是re.findall,但錯誤不斷出現。

代碼:

import urllib 
from BeautifulSoup import * 
url = raw_input('Enter the URL:') 
stri = urllib.urlopen(url).read() 
soup = BeautifulSoup(stri) 

#retrieve of the span tags 

spans = ''.join(soup('span')) 
numlist = list() 
for tag in spans: 
    num = int(re.findall('[0-9]+', tag)) 
    numlist.append(num) 
print(numlist) 

我看見幾個解決方案,爲這些類型的錯誤,但似乎無法來解決這個問題。

我錯過了什麼?

我增加了tag.text,錯誤已經變成一個又一個,現在我越來越: 「errno的11004]的getaddrinfo失敗」

我看着不同的職位,但未能解決這個問題,所以我跑一行行的代碼,看看哪來的問題是,我發現它時,我跑在原代碼的第四句出現:

html = urllib.urlopen(url).read() 

請幫助?

+2

調試錯誤消息的第一步,是要找到的行號。您錯過了行號。 – tcooc

+0

Python並不只是說「期望的字符串或緩衝區」 - 它寫了一個堆棧跟蹤,顯示出存在問題的行。你可以發佈堆棧跟蹤,以便我們可以看到它嗎?否則,我們必須猜測問題出在哪裏。 – tdelaney

+0

調試提示:'print'是你的朋友。我添加了'print'badness',輸入(soup('span')[0])'到你的代碼中,並且得到了'badness '。這不是可以加入的東西。作爲're.findall'返回一個列表 – tdelaney

回答

1

tagTag對象,其中包含了大量的信息,而不僅僅是一個字符串。如果你想在標籤內的文本沒有任何標記,使用tag.text,例如:

spans = ''.join(tag.text for tag in soup('span')) 
# now `for tag in spans:` makes no sense because spans is a string 

spans = soup('span') 
for tag in spans: 
    num = len(re.findall('[0-9]+', tag.text)) # note len, not int 
+0

的類型轉換爲整數,將無法正常工作,我複製粘貼沒有看到'int'。 –

+0

@MosesKoledoye感謝 –

+0

@AlexHall謝謝,所以我改變了代碼,並得到了一個不同的錯誤,我將細節添加到我的第一個錯誤問題。 –

相關問題