coding/Python

python bs4 하위태그 지우기(원하는 태그만 스크랩핑)

JIN_Coder 2022. 4. 29. 14:38

2022.04.29

 

크롤링을 하다 보면 내가 원하는 텍스트 뒤로 하위 태그들이 달려 있어

필요하지 않는 태그들도 같이 크롤링 되는 것을 볼 수 있다.

 

예를 들면 

# import 생략

soup = BeautifulSoup(data.text, 'html.parser')
rows = soup.select("#body-content > div.newest-list > div > table > tbody > tr")

for row in rows:
    rank = row.select_one("td.number")
    print(rank)

내가 원하는건 number 클래스 td 뒤 text만 필요하지만 뒤에 span태그 들이 같이 딸려온다

이때 span 태그는 안나오게 하는법이 있다

soup = BeautifulSoup(data.text, 'html.parser')
rows = soup.select("#body-content > div.newest-list > div > table > tbody > tr")

for row in rows:
    rank = row.select_one("td.number")
    rank.find('span').decompose()
    rank2 = rank.text.strip()
    print(rank2)

.find('span').decompose() 하면 뒤에 스팬태그는 빼라는 게 된다.

.strip()은 프린트시 '/n' 같은 줄 바꿈 을 없애주기 위해서 사용 했다

 

-----

그리고 이거보다 더 쉽게 하는법!

.text[0:2]

문자열 슬라이싱 기법

[0:7:2]

문자열 순서 0부터 시작해서 7번 문자열에서  -1 한 곳까지만 하는데 간격은 2씩 이라는 말(이때 간격은 생략 가능)

"hello world"

012345678910 순서가 있으면

h부터 o까지인데-1 해주면 w까지 출력, 2간격이니까

'hlow'가 출력됨

soup = BeautifulSoup(data.text, 'html.parser')
rows = soup.select("#body-content > div.newest-list > div > table > tbody > tr")

for row in rows:
    rank = row.select_one("td.number").text[0:2].strip()
    print(rank)

위에는 span 태그를 뺴고 출력이라면

슬라이싱은 span도 뒤에 있지만 text부분의 0 번쨰 처음부터 2번째 까지만 출력하니까 뒤에가 안나오는거임

 

 

// 참고

https://cokes.tistory.com/144

 

파이썬 BeautifulSoup 사용해서 하위태그 지우기

html = requests.get(url) object = BeautifulSoup(html.text, "html.parser") name_object = object.find('h2', {'id': 'sit_title'}) # 아이템이름입니다.나는 보조입니다. print(name_object.text) # 아이템이..

cokes.tistory.com

https://codacoding.tistory.com/31

 

파이썬(Python) 기초 Step 2. 문자열(String)

○ 문자열이란? 문자열은 영어로 String이라고 하며, 문자인 character의 나열을 의미합니다. 문자열은 따옴표로 감싸서 표시합니다(예시 1) 참조). 또한, 플러스( + ) 연산자를 사용하여 문자열과 문

codacoding.tistory.com

 

'coding > Python' 카테고리의 다른 글

셀레니움  (0) 2022.07.20
python flask 시작  (0) 2022.04.29
python pymongo 사용법  (0) 2022.04.29
python bs4  (0) 2022.04.28
python requests 사용법  (0) 2022.04.28