【问题标题】:How to get the text without space from the bs4 output [duplicate]如何从bs4输出中获取没有空格的文本[重复]
【发布时间】:2021-06-17 10:50:29
【问题描述】:

我想抓取此页面并获取没有空格的包含。

```
 import requests
from bs4 import BeautifulSoup
def getdat(url):
    r = requests.get(url)
    return r.text
newsurl = "https://www.msei.in/downloads/equity-reports/fii-dii-activities"
data = getdat(newsurl)
soup = BeautifulSoup(data, 'html.parser')
result = soup.findAll('tr')
for i in result:
    print(i.text)
```

代码的输出是-

我的要求是获取没有空格的文本。如何获取没有空格的文本?

【问题讨论】:

标签: python python-3.x web-scraping beautifulsoup


【解决方案1】:

使用正则表达式,您可以轻松删除所有空格(如果您愿意,也可以少一些,但需要付出更多努力)。

import requests
import re

from bs4 import BeautifulSoup
def getdat(url):
    r = requests.get(url)
    return r.text
newsurl = "https://www.msei.in/downloads/equity-reports/fii-dii-activities"
data = getdat(newsurl)
soup = BeautifulSoup(data, 'html.parser')
result = soup.findAll('tr')

ans = [re.sub(r"\u0000+", "\n", re.sub(r"\s+", "", re.sub(r"\n+", "\u0000", x.text))).strip() for x in result]

for i in ans:
    print(i)

【讨论】:

  • 我已经尝试过了,但是它删除了所有的空间并且字符串无法区分。
  • 我进行了编辑以使输出更清晰,希望这对您更有效。
【解决方案2】:

您知道.strip 函数会删除字符串两端的空格吗?

for i in result:
    txt = i.text.strip()
    if txt:
        print(txt)

【讨论】:

  • 我实际上认为这种方法可行,但令我惊讶的是,它没有。我相信这是 HTML 的一个特例。
  • 我试过了,但输出还是一样。
【解决方案3】:

我尝试使用 Tim Roberts 提到的方法,但令我惊讶的是,它不起作用。这是我想出的:

import bs4
import requests

res = requests.get("https://www.msei.in/downloads/equity-reports/fii-dii-activities")
soup = bs4.BeautifulSoup(res.text, features="html.parser")

elems = soup.select("tr")
text = []
for e in elems:
    print(e.getText().split())

我发现调用split() 方法是获得干净的字符串列表的最简单方法,没有空格。

['Category', 'Date', 'Buy', 'Value', 'Sell', 'Value', 'Net', 'Value']
['FII/FPI', '19-Mar-2021', '24,193.67', '22,775.24', '1,418.43']
['As', 'on', '19', 'Mar,', '2021']
['Category', 'Date', 'Buy', 'Value', 'Sell', 'Value', 'Net', 'Value']
['DII', '19-Mar-2021', '7,503.70', '6,944.08', '559.62']
['As', 'on', '19', 'Mar,', '2021']

【讨论】:

  • 非常感谢。这段代码很完美。
【解决方案4】:

如果您想删除打印文本前导和尾随的所有空格,那么您可以这样做:

print(i.text.strip())

如果您想删除文本中的所有空格,那么您可以执行以下操作:

import re
...
removedWhiteSpaceText = re.sub(r'\s+', '', i.text)
print(removedWhiteSpaceText)
...

【讨论】:

    【解决方案5】:

    打印输出时尝试使用替换。

    for i in result:
        print(i.text.replace(" ",""))
    

    【讨论】:

    • 这会删除文字空格,但不会删除换行符。 OP 希望内容没有 任何 空格,其中包括换行符。
    猜你喜欢
    • 2021-12-10
    • 2021-03-30
    • 1970-01-01
    • 2017-03-02
    • 2021-07-29
    • 2018-03-15
    • 2021-11-17
    • 2015-09-16
    • 2011-08-27
    相关资源
    最近更新 更多