반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- django
- numpy
- Mac
- Redshift
- hive
- Excel
- Apache
- PySpark
- Github
- matplotlib
- PANDAS
- gas
- SQL
- GIT
- Java
- dataframe
- google apps script
- string
- 파이썬
- Google Spreadsheet
- PostgreSQL
- list
- c#
- array
- Google Excel
- math
- Tkinter
- Kotlin
- Python
Archives
- Today
- Total
달나라 노트
Python : Web 페이지에서 원하는 태그의 정보 추출하기 본문
728x90
반응형
Web 페이지의 HTML코드를 가져온 다음에는 정보를 선택하는 작업이 필요합니다.
가져온 HTML 코드에서 내가 원하는 부분만 추출할 수 있어야 한다는 뜻입니다.
import requests
from bs4 import BeautifulSoup as bs
URL = "https://www.naver.com"
rq = requests.get(URL)
soup = bs(rq.content, 'html.parser')
li_list = soup.find_all('div', class_ = 'sc_timesquare')
for li in li_list:
ul = li.select('ul > li')
for l in ul:
print(l.get_text())
- Output
미세좋음
초미세좋음
위 코드를 봐봅시다.
li_list = soup.find_all('div', class_ = 'sc_timesquare')
위 부분은 가져온 HTML 코드에서 class가 sc_timesquare인 div 태그의 정보를 모두 찾는(find_all) 과정입니다.
li_list = soup.find_all('div', class_ = 'sc_timesquare')
for li in li_list:
ul = li.select('ul > li')
그리고 위 부분은 찾아온 sc_timesquare라는 class를 가진 div 태그 안에 존재하는 ul태그의 자식 li 태그를 가져오라는 의미입니다.
무슨소리냐면 아래처럼 가져온 div 태그에는 ul, li 태그 등 여러 내용들이 존재할 수 있겠죠.
<div>
<ul>
<li></li>
<li></li>
...
</ul>
<ul>
<li></li>
<li></li>
...
</ul>
<p></p>
...
</div>
여기에 존재하는 것들 중 ul 태그 속의 자식태그인 li 태그 정보를 가져오라는 뜻입니다.
또한 div 태그 안에는 ul, li 태그가 여러 개 존재할 수 있으므로 반복문을 사용했죠.
이렇게 html 속 특정 태그를 가져올 때에는 BeautifulSoup 객체의 select를 사용할 수 있습니다.
import requests
from bs4 import BeautifulSoup as bs
URL = "https://www.naver.com"
rq = requests.get(URL)
soup = bs(rq.content, 'html.parser')
li_list = soup.find_all('div', class_ = 'sc_timesquare')
for li in li_list:
ul = li.select('ul > li')
print(ul)
일단 위처럼 코드를 실행하면 아래와같은 내용이 나올겁니다.
[<li class="air_item">미세<strong class="state state_good">좋음</strong></li>, <li class="air_item">초미세<strong class="state state_good">좋음</strong></li>]
즉, select까지만 하면 div 태그 안의 ul 태그에 속한 li 태그 정보를 가져올 수 있던거죠.
그러나 보기가 좀 어렵죠..? 저는 해당 태그 속 텍스트만 가져오고싶은데 이상한 태그들까지 다 딸려와버렸습니다.
li_list = soup.find_all('div', class_ = 'sc_timesquare')
for li in li_list:
ul = li.select('ul > li')
for l in ul:
print(l.get_text())
- Output
미세좋음
초미세좋음
따라서 반복문을 한 번 더 사용하여 get_text라는 것을 이용했습니다.
이건 태그 속 텍스트만을 반환해주죠.
728x90
반응형
'Python > Python ETC' 카테고리의 다른 글
Image를 ASCII Character art로 변환하기 in Python (0) | 2021.04.01 |
---|---|
Python subprocess : 음악 파일 재생하기 (0) | 2021.03.29 |
Python : Web page의 HTML 코드를 가져오기. (Web Crawling, 크롤링, 웹 크롤링) (0) | 2021.01.23 |
Python tistory api : 앱 등록 & Access token 발급 (0) | 2021.01.04 |
Python에서 로또 당첨 번호 가져오기 (2) | 2021.01.04 |
Comments