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(" ", ""))
반응형
'개발자의 개발개발한 하루 > python' 카테고리의 다른 글
python logging으로 매일 log 만들기 (backupcount 설정 했는데 안 지워 질 때 해결법) (0) | 2022.03.28 |
---|---|
python iframe 렌더링된 페이지 크롤링 하기 (0) | 2022.02.16 |
python 3에서 바뀐 것 (출력방식, 문자열 인코딩) (0) | 2022.02.14 |
파이썬 크롤링 User-Agent (0) | 2022.02.09 |
파이썬 정규표현식 re 사용 (0) | 2022.02.09 |
댓글