본문 바로가기
개발자의 개발개발한 하루/python

python get_text 와 string 차이

by ju니어 2022. 3. 14.
728x90
반응형

 

get_text와 string의 차이를 모르겠어서

이것 저것 테스트를 했다.

 

get_text string
현재 HTML 문서의 모든 텍스트를 한 번에 추출할 수 있다.  태그 내 문자열을 반환
현재 태그를 포함하여 모든 하위 태그를 제거하고 유니코드 텍스트만 들어있는 문자열을 반환한다.
-> 항상 맨 뒤에 써야함
태그가 하나라면, 문자값을 가진다면 문자열을 반환한다.
문자열이 없으면 유니코드 형식으로 반환하므로, 출력값이 안나옴. string처럼 None도 표시 안됨 태그가 둘 이상이면 뭘 반환해야 하는지 명확하지 않아서 
None을 출력한다.
하위테그까지 들고오려면 get_text 쓰는 것이 좋음 정확하게 또 명시적으로, 정석대로 원한다면 string이 좋음

 

 

둘 중 편한대로 쓰면 될 것 같다. 

 

from bs4 import BeautifulSoup


html = """
<html>
<header>
</header>
<body>
    <title="test"> </title>
    <h1> string get_text test</h1>
    <li>
        <td> hihihihi </td>
        <td> hello </td>
        <td> python 
            <p>python3</p>
        </td>
    </li>
</body>
</html>
"""


soup = BeautifulSoup(html, 'html.parser')
td_string = soup.find_all('td')
td_gettext = td_string

print("string")
for td in td_string:
    print(td.string)
print("===============")
print("get_text")
for td in td_string:
    print(td.get_text())

 

 

 

 

string과 get_text 비교해봤을 때,

string은 td밑에 p로 텍스트가 있는데, 여러개 있다 보니 어떤 걸 들고와야하는 지 몰라서

마지막에 none으로 출력이 된다.

 

get_text로 하면 td테그 밑에 모든 텍스트를 추출하는 것을 볼 수 있다.

다만 td밑에 p테그로 나와있는 텍스트는 유니코드로 추출하다 보니, 여백이 있게 나오는 것을 볼 수 있다.

 

 

해당 경우는 아래 코드처럼 추가해서 실행하면 된다.

from bs4 import BeautifulSoup


html = """
<html>
<header>
</header>
<body>
    <title="test"> </title>
    <h1> string get_text test</h1>
    <li>
        <td> hihihihi </td>
        <td> hello </td>
        <td> python 
            <p>python3</p>
        </td>
    </li>
</body>
</html>
"""


soup = BeautifulSoup(html, 'html.parser')
td_string = soup.find_all('td')
td_gettext = td_string

print("string")
for td in td_string:
    print(td.string)
print("===============")
print("get_text")
for td in td_string:
    print(td.get_text().strip().replace(" ", ""))

 

 

반응형

댓글