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://codacoding.tistory.com/31
'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 |