BeautifulSoup-TypeError:序列项0:预期的str实例

时间:2019-01-02 18:09:14

标签: python python-3.x beautifulsoup

我使用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行附近找到了标记。
我认为我的语法可能是问题,但我不确定。我该如何解决?

1 个答案:

答案 0 :(得分:0)

这里有几个问题:

  • 首先,我不确定您从何处获得response,但这应该是一串实际的HTML。确保您不仅从抓取一个告诉您是否成功的网站中捕获了“响应”代码。
  • 但是,更重要的是,当您执行“ findAll”时,请注意,这将返回BeautifulSoup对象的列表,而不是字符串的列表。因此,“ join”命令不知道该如何处理。它查看列表中的第一个对象,发现它不是字符串,这就是为什么它会因抱怨“ expected str instance”而出错。好消息是您可以使用.text从给定的<p>元素中提取实际文本。
  • 尽管即使您确实使用.text从每个<p>对象中提取实际文本,但是如果您的列表是join()unicode格式。因此,在加入之前,您可能必须做一些编码技巧才能使所有内容都具有相同的类型。

这是我使用此页面的一个示例:

str

这将打印在“ P”标记中找到的所有内容的组合文本。

编辑:此示例在Python 2.7.x上进行。对于3.x,删除“ .encode('utf-8')”。