【问题标题】:python/beautifulsoup/get_text().split() - how can I get connected text including blank valuepython/beautifulsoup/get_text().split() - 如何获取包含空白值的连接文本
【发布时间】:2022-01-18 07:31:20
【问题描述】:

简而言之, 我需要"KBSTAR Fn K-뉴딜디지털플러스",但我得到三个值'KBSTAR', 'Fn', 'K-뉴딜디지털플러스'

我需要:

['1501', 'KBSTAR Fn K-뉴딜디지털플러스', '11,830', '90', '-0.76%', '0', '95', '800', '0.00', '180', 'N/A', 'N/A']

但结果是这样的:

['1501', 'KBSTAR', 'Fn', 'K-뉴딜디지털플러스', '11,830', '90', '-0.76%', '0', '95', '800', '0.00', '180', 'N/A', 'N/A']

这是我的代码: 我得到这个是因为数据中有空白。但我不知道如何在不使用 split() 方法的情况下获取连接的单词数据。有没有办法让列表数据本身有空白?因为大部分数据本身没有空白

stock_list = soup.find("table", attrs={"class": "type_2"}).find("tbody").find_all("tr")
for stock in stock_list: 
    stock.get_text().split()

下面是我的原始 HTML

<tr onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" style="background-color: rgb(255, 255, 255);">
                    <td class="no">1501</td>
                    <td><a href="/item/main.naver?code=368200" class="tltle">KBSTAR Fn K-뉴딜디지털플러스</a></td>
                    <td class="number">11,830</td>
                    <td class="number">
                <img src="https://ssl.pstatic.net/imgstock/images/images4/ico_down.gif" width="7" height="6" style="margin-right:4px;" alt="하락"><span class="tah p11 nv01">
                90
                </span>
            </td>
                    <td class="number">
                <span class="tah p11 nv01">
                -0.76%
                </span>
            </td>
                    <td class="number">0</td>
                                    <td class="number">180</td>
                                    <td class="number">800</td>
                                    <td class="number">95</td>
                    <td class="number">N/A</td>
                    <td class="number">N/A</td>
                    <td class="number">N/A</td>
                    <td class="center"><a href="/item/board.naver?code=368200"><img src="https://ssl.pstatic.net/imgstock/images5/ico_debatebl2.gif" width="15" height="13" alt="토론실"></a></td>
                </tr>

【问题讨论】:

  • 你知道他们是有联系的,但没有什么特别的理由。如果您知道您需要从第二项到第一个数字的所有内容,那很容易做到。或者,您可以专门查找带有 class=title 的 &lt;a&gt; 标签。

标签: python html pandas beautifulsoup


【解决方案1】:

您为什么使用split?只需选择 td 子元素。使用strip 进行整理。 html 看起来也有点不对劲。

from bs4 import BeautifulSoup as bs

tr_html = '''<tr onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" style="background-color: rgb(255, 255, 255);">
                    <td class="no">1501</td>
                    <td><a href="/item/main.naver?code=368200" class="tltle">KBSTAR Fn K-뉴딜디지털플러스</a></td>
                    <td class="number">11,830</td>
                    <td class="number">
                <img src="https://ssl.pstatic.net/imgstock/images/images4/ico_down.gif" width="7" height="6" style="margin-right:4px;" alt="하락"><span class="tah p11 nv01">
                90
                </span>
            </td>
                    <td class="number">
                <span class="tah p11 nv01">
                -0.76%
                </span>
            </td>
                    <td class="number">0</td>
                                    <td class="number">180</td>
                                    <td class="number">800</td>
                                    <td class="number">95</td>
                    <td class="number">N/A</td>
                    <td class="number">N/A</td>
                    <td class="number">N/A</td>
                    <td class="center"><a href="/item/board.naver?code=368200"><img src="https://ssl.pstatic.net/imgstock/images5/ico_debatebl2.gif" width="15" height="13" alt="토론실"></a></td>
                </tr>'''

soup = bs(tr_html, 'lxml')
[i.text.strip() for i in soup.select('td') if i.text.strip()]

【讨论】:

    【解决方案2】:

    str.split() 没有sep 参数将字符串按(连续)空格分割。请改用str.strip() 来删除前导和尾随空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2016-11-25
      相关资源
      最近更新 更多