2016-11-10 99 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谢谢,所以我改变了代码,并得到了一个不同的错误,我将细节添加到我的第一个错误问题。 –

相关问题