我使用python制作了一个网络爬虫,并且一切正常,直到到达代码的这一部分为止:
# 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行附近找到了标记。
我认为我的语法可能是问题,但我不确定。我该如何解决?
答案 0 :(得分:0)
这里有几个问题:
response
,但这应该是一串实际的HTML。确保您不仅从抓取一个告诉您是否成功的网站中捕获了“响应”代码。 join
”命令不知道该如何处理。它查看列表中的第一个对象,发现它不是字符串,这就是为什么它会因抱怨“ expected str instance
”而出错。好消息是您可以使用.text
从给定的<p>
元素中提取实际文本。.text
从每个<p>
对象中提取实际文本,但是如果您的列表是join()
和unicode
格式。因此,在加入之前,您可能必须做一些编码技巧才能使所有内容都具有相同的类型。这是我使用此页面的一个示例:
str
这将打印在“ P”标记中找到的所有内容的组合文本。
编辑:此示例在Python 2.7.x上进行。对于3.x,删除“ .encode('utf-8')”。