【问题标题】:How to join text that has been scraped from website python如何加入从网站python中抓取的文本
【发布时间】:2021-04-23 10:52:55
【问题描述】:

我正在抓取一个网站,它会将页面分成多个<p> 标签。如何将它们连接成一个字符串?

    article_wrapper = article.find('div', class_ = 'column column--full article__content')
    article_content = article_wrapper.find_all('p')

    for element in article_content:
      print(element.text)# prints article content

我尝试创建一个data = [],然后每次都附加该元素,但这似乎不起作用。

data = []
for element in article_content:
data.append(element)
print(element.text)# prints article content
print('DATA')
print(data)

我得到的输出:

我想把它全部放在一个字符串中,这样我就可以一起传递而不是分开传递。

【问题讨论】:

  • 请展示您对“data = []”的尝试以及确切的行为。
  • 没有更多信息很难说,但是您需要使用比“p”更具体的元素,或者如果不可能,请在将单个标签响应附加到列表之前清理它们/final 字符串。
  • 不会编辑帖子
  • @goalie1998 编辑完成。我认为这表明我的问题出在哪里。
  • @Chase 我添加了一张图片来展示我的尝试

标签: python beautifulsoup


【解决方案1】:

你基本上在那里。您打印了标签的文本,但将整个标签附加到您的列表中。如果你附加了element.text,你就会拥有它。如果您希望它作为一个字符串而不是字符串列表,您可以这样做:

txt = ""
for article in article_content:
    if not element.find('a'): # to filter out the extra text
        txt += article.text

如果您想将每个段落单独保留在列表中,只需将附加行更改为:

data = []
for element in article_content:
    if not element.find('a'): # to filter out the extra text
        data.append(element.text)

【讨论】:

  • 谢谢!我没有发布的代码仅针对文章所在的容器,但是我应该查找什么来学习如何整理它?
  • 它会因站点而异,但在您要过滤的项目中找到不在您想要的项目中的东西(标签、类、ID、特定文本...)保留,并据此过滤。但这并不总是可能的。我为这种特定情况添加了一个过滤器,但它不适用于所有其他情况。
【解决方案2】:
article_wrapper = article.find('div', class_ = 'column column--full article__content')
article_content = article_wrapper.find_all('p')    
data = []
for element in article_content:
    data.append(element.find_all(text=True))
print('DATA')
print(data)

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2018-09-01
    • 2021-02-15
    • 1970-01-01
    • 2017-01-05
    • 2017-11-26
    相关资源
    最近更新 更多