我用python制作了一个web爬虫程序,在代码的这一部分之前,一切都运行得很好:
# Use BeautifulSoup modules to format web page as text that can
# be parsed and indexed
#
soup = bs4.BeautifulSoup(response, "html.parser")
tok = "".join(soup.findAll("p", text=re.compile(".")))
# pass the text extracted from the web page to the parsetoken routine for indexing
parsetoken(db, tok)
documents += 1
我得到的错误是TypeError: sequence item 0: expected str instance
,在代码中的tok行附近找到了标记。
我想我的语法可能是个问题,但我不确定。我该怎么解决这个问题?在
这里有几个问题:
response
,但这应该是一个实际的HTML字符串。确保你不只是从抓取一个网站的“响应”代码来告诉你它是否成功。在join
”命令不知道如何处理这些。它查看列表中的第一个对象,发现它不是一个字符串,这就是为什么它会错误地抱怨它“expected str instance
”。好消息是您可以使用.text
从给定的<p>
元素提取实际文本。在.text
从每个<p>
对象中提取实际文本,但是如果列表是unicode
和str
格式的混合,您的join()
仍然可能失败。因此,在加入之前,您可能需要执行一些编码技巧,以便将所有内容都作为同一类型。在下面是一个我用这个页面做的例子:
这将打印“p”标记中找到的所有内容的组合文本。在
编辑:这个例子在Python2.7.x上,对于3.x,删除“.encode('utf-8')”。在
相关问题 更多 >
编程相关推荐