无法解决:TypeError:期望的字符串或缓冲区

时间:2016-11-10 21:09:05

标签: python python-2.7 web-scraping beautifulsoup

我试图通过查找范围标记及其中的数字来编写代码来从HTML中删除数字。

我一直收到错误"期望的字符串或缓冲区"。

我在搜索不同的问题时已经阅读了一些解决方案,但是当我尝试" ''.join(some_list)"时,我又收到了其他错误:

  

"序列项0:期望字符串,找到标签"

试图搜索那个,看到一些解决方案,比如使用.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()

请帮帮忙?

1 个答案:

答案 0 :(得分:1)

tag是一个Tag对象,它包含大量信息,而不仅仅是一个字符串。如果您希望标签内的文本没有任何标记,请使用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