python/beautifulsoup/get_text().split() - how can I get connected text including blank value

Viewed 75

In short, I need "KBSTAR Fn K-뉴딜디지털플러스" but I get three values 'KBSTAR', 'Fn', 'K-뉴딜디지털플러스'

I need:

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

but the result is like:

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

Here is my code: I am getting this because of blank in a data. But I don't know how to get connected words data without using split() method. Is there any way to get list data having blank in itself? Because most of the data have no blank itself

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

Below is my raw 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>
2 Answers

Why are you using split? Just select for the td child elements. Use strip to tidy. The html looks a little off as well.

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()]

str.split() without sep argument splits the string by (consecutive) whitespace(s). Use str.strip() instead to remove leading and trailing whitespaces.

Related