Python Beautifulsoup getText()连接菜单项

时间:2017-02-01 00:57:58

标签: python beautifulsoup

我遇到过一个案例,其中BeautifulSoup将文本连接在一起 - 通常,我没有看到其他网站出现此问题'导航...

getText()

编辑:在评论之前,请注意函数lxml会返回一个连接的字符串:' EtusivuYritysYritysesittely'等等。但是,这些应该是单独的词:' Etusivu Yritys Yritysesittely&#39 ;;下面的代码正确地分割每个单词。

根据帖子onStart(),我还将解析器切换为In [100]: def visible(element): ...: if element.parent.name in ['style', 'script', '[document]', 'head', 'title', 'meta']: ...: return False ...: elif isinstance(element,bs4.element.Comment): ...: return False ...: return True ...: In [101]: visible_texts = list(filter(visible, nav_content.findAll(text=True))) In [102]: ' '.join(visible_texts) Out[102]: '\n Etusivu Yritys Yritysesittely Kuvagalleria \n Projektiesittely Tuotteet Rakentaminen Mestaripihatto Rakentaminen ja suunnittelu Betonielementit Kattorakenteet Mestarikasvattamo Betoniritilät Pihattokalusteet ja -laitteet GEA lypsy ja maidonkäsittely GEA pihattokalusteet GEA ruokinta GEA lannanpoistolaitteet Varaosat ja tarvikkeet Merivirta - kalusteet Nautojen hyvinvointi Karjatalous Ilmanvaihto Irtorehusiilot Valaistus Lietesäiliön verkkoaita Lannankäsittely Flygt-lietepumput Jälkimarkkinointi Yhteystiedot' ,但结果相似。

我发现Python Beautifulsoup get_text() not getting all text中概述的方法是一项体面的工作:

soup.findAll(text=True)

但我真的在努力找出差异。我当然BeautifulSoup Grab Visible Webpage Text,但仍然无法弄清楚const path = require('path'); // Path separators could change depending on the platform const pathToCreate = 'path/to/dir'; pathToCreate .split(path.sep) .reduce((prevPath, folder) => { const currentPath = path.join(prevPath, folder, path.sep); if (!fs.existsSync(currentPath)){ fs.mkdirSync(currentPath); } return currentPath; }, ''); 如何返回不同的结果。有一会儿,我想知道这种行为是否是由于导航项目是芬兰语(字符串很奇怪!),但在将文本翻译成英语后很明显不是问题。所以有迹象表明标记格式不正确,但在我承诺交换代码之前,我真的很想理解为什么......任何清晰度都非常受欢迎。

2 个答案:

答案 0 :(得分:0)

get_text()

如果您只想要文档或标记的文本部分,则可以使用get_text()方法。它返回文档中或标记下的所有文本,作为单个Unicode字符串

find_all(text=True)

返回一个文本列表,它是相关上下文节点的后果。

答案 1 :(得分:0)

我查看了BS4源代码:

def get_text(self, separator="", strip=False,
             types=(NavigableString, CData)):
    """
    Get all child strings, concatenated using the given separator.
    """
    return separator.join([s for s in self._all_strings(
                strip, types=types)])
getText = get_text

结果separator参数是我遇到的行为背后的原因...改变我的代码就像返回预期的结果:

In [113]: nav_content.getText(separator=" ")
Out[113]: '\n \n Etusivu Yritys Yritysesittely Kuvagalleria \n Projektiesittely Tuotteet Rakentaminen Mestaripihatto Rakentaminen ja suunnittelu Betonielementit Kattorakenteet Mestarikasvattamo Betoniritilät Pihattokalusteet ja -laitteet GEA lypsy ja maidonkäsittely GEA  pihattokalusteet GEA  ruokinta GEA lannanpoistolaitteet Varaosat ja tarvikkeet Merivirta - kalusteet Nautojen hyvinvointi Karjatalous Ilmanvaihto Irtorehusiilot Valaistus Lietesäiliön verkkoaita Lannankäsittely  Flygt-lietepumput Jälkimarkkinointi Yhteystiedot \n'