【问题标题】:How to remove extra space or gap between the tag in python如何删除python中标签之间的额外空格或间隙
【发布时间】:2016-02-27 07:11:11
【问题描述】:

您好,我正在从网站上抓取 div 网站中的 li 标签。我得到的输出中有很多空格如何从标签中删除多余的空格 我正在使用 python 3.5.1 和 BeautifulSoup 进行抓取 我的输出:

[<li>

        GUANGZHOU ADS AUDIO SCIENCE &amp; TECHNOLOGY CO.,LTD.

            </li>, <li>

              SHIMA ADS INDUSTRIAL DISTRICT GUANGZHOU GUANGDONG CHINA

            </li>, <li>

        GUANGDONGGUANGZHOU

            </li>, <li>

              510440

            </li>, <li>

              http://www.adsaudio.cc

            </li>]
[<li>

        GUANGDONG TEXTILES IMPORT &amp; EXPORT COMPANY LTD.

            </li>, <li>

              GUANGDONG ,NO.168 XIAO BEI RD.,GUANGZHOU

            </li>, <li>

        GUANGDONGGUANGZHOU

            </li>, <li>

              510045

            </li>, <li>

              http://www.gdtex.com

            </li>]

我想要像

这样的输出
 GUANGZHOU ADS AUDIO SCIENCE &amp; TECHNOLOGY CO.,LTD.
 SHIMA ADS INDUSTRIAL DISTRICT GUANGZHOU GUANGDONG CHINA
 GUANGDONG TEXTILES MANSION,NO.168 XIAO BEI RD.,GUANGZHOU
 GUANGDONG ,NO.168 XIAO BEI RD.,GUANGZHOU

如何去除多余的空间或间隙

【问题讨论】:

  • 你也需要这个标签吗?
  • re.sub("\s+"," ",my_text) 可能会让你足够接近..
  • @Mauro Baraldi 不需要标签
  • @Joran Beasley 它说 TypeError: expected string or bytes-like object
  • 好吧 my_text 需要是一个字符串或类似字节的对象

标签: python web-scraping beautifulsoup


【解决方案1】:

你可以使用 BeautifulSoup 中的get_text 方法

items = soup.find_all("li")
for item in items:
    print item.get_text().strip()

【讨论】:

  • 是的,但问题是在这个 li 标签中有诸如公司名称、地址、电子邮件之类的信息。我只想获得公司名称和地址。那我怎么才能得到呢
  • 发布一些您希望提取的数据示例
  • 是的,它正在检索,但我想显示为公司名称 = "公司名称" 公司地址 = "公司地址"
【解决方案2】:

尝试在您从Beautiful Soup 返回的文本上使用strip

假设您正在使用类似的方法从 li 标签中提取文本:text = soup.find('li').get_text(),然后在文本 text.strip() 上添加对 strip() 的调用,这应该会删除两端的空格。

from bs4 import BeautifulSoup

def get_li_texts(html):
  soup = BeautifulSoup(html)
  li_list = soup.findAll('li')

  li_texts = []
  for li in li_list:
    text = li.get_text().strip()
    li_texts.append(text)
  return li_texts

html = '<li>\n\n        GUANGZHOU ADS AUDIO SCIENCE &amp; TECHNOLOGY CO.,LTD.\n\n            </li>, <li>\n\n              SHIMA ADS INDUSTRIAL DISTRICT GUANGZHOU GUANGDONG CHINA\n\n            </li>, <li>\n\n        GUANGDONGGUANGZHOU\n\n            </li>, <li>\n\n              510440\n\n            </li>, <li>\n\n              http://www.adsaudio.cc\n\n            </li>'
texts = get_li_texts(html)
>> [u'GUANGZHOU ADS AUDIO SCIENCE & TECHNOLOGY CO.,LTD.',
>> u'SHIMA ADS INDUSTRIAL DISTRICT GUANGZHOU GUANGDONG CHINA',
>> u'GUANGDONGGUANGZHOU',
>> u'510440',
>> u'http://www.adsaudio.cc']

【讨论】:

  • 但是我不能在这里添加所有的 li 标签来剥离它。我正在抓取成千上万的公司详细信息。