일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- pandas
- auc
- EarlyStopping
- Roc curve
- ML
- 이것이 코딩 테스트다
- 그리디
- Logistic linear
- semi-project
- pos_tag
- beautifulsoup
- 인공지능
- find_all()
- json
- selenium
- 잡담
- stopwords
- IOPub
- category_encoders
- Trouble shooting
- 원소주
- 머신러닝
- 트러블슈팅
- PYTHON
- aof
- SMTP
- 크롤링
- AI
- 파일입출력
- Django
Archives
- Today
- Total
개발 블로그
[Python] 웹 크롤링 & 자연어 처리 (1) 본문
본인이 쓴 크롤링에 관한 게시물 :
[CODELION 강의] [심화] 같이 푸는 PYTHON - 크롤링
[Toy_Project] Python 웹크롤링 - EPL순위 가져오기
여러 페이지에 대해서 정보를 가져오기 위해서는 url을 이해하고 값을 조정하여 페이지에 접근해야 됩니다. 따라서 크롤링 전에 url에 대한 분석이 필요합니다.
url에 대한 설명은 brunch 블로그(https://brunch.co.kr/@beusable/237)를 참고했습니다.
00 BeautifulSoup
BeautifulSoup는 request를 통해 얻어온 데이터를 BeautifulSoup객체로 파싱하여 원하는 데이터를 쉽게 추출하도록 도와주는 모듈입니다.
- import
from bs4 import BeautifulSoup
from urllib.request import urlopen
01 Daum영어사전에서 영단어 찾기
'affirmation'이라는 단어를 url값에 전달해서 해당 단어와 뜻을 가져와 보겠습니다.
urlopen(url) : 웹사이트에 request를 보내고 response된 데이터 변수에 대입합니다.
Beautiful(response, 'html.parser') : response된 데이터를 html형식으로 Soup객체로 변환합니다.
word = 'affirmation'
url = 'https://alldic.daum.net/search.do?q=' + word
web = urlopen(url) # urlopen(url).read().decode('utf-8')
web_page = BeautifulSoup(web, 'html.parser')
print(web_page)
위와 같은 html형식의 데이터에서 원하는 단어를 찾기위해서 크롬개발자 도구(F12 또는 Ctrl + Shift + I)를 사용합니다.
affirmation이라는 단어가 <span>태그에 class="txt_emph1"이라는 것을 알 수 있습니다.
find()함수와 find_all()함수를 통해 접근할 수 있습니다.
※ 주의 할 점
find(), find_all() 함수의 tag,class,id,arguement 같은 전달인자들은 문자열로 전달해야 합니다.
find
# find기본형
web_page.find(name=None, attrs={}, recursive=True, text=None, **kwargs)
- 찾는 태그가 여러개일 경우 맨위의 한 가지 값만 리턴
- .get_text()함수 사용 가능
- type : bs4.element.Tag
find_all
# find_all 기본형
web_page.find_all(
name=None,
attrs={},
recursive=True,
text=None,
limit=None,
**kwargs,
)
- 입력한 모든 태그를 리턴
- .get_text()함수 사용 못함 -> 사용하려면 인덱스를 붙여 Tag개체를 불러내서 사용 가능
- type : bs4.element.ResultSet
# 찾는 단어가 하나일 때
box1 = web_page.find('span', {'class': 'txt_emph1'})
print(box1)
print(box1.get_text())
print(box1.get_text())
print()
# 영단어 뜻 출력, find_all의 값을 하나씩 받아서 get_text()로 문자열을 얻는다
for definition in web_page.find_all('span',{'class': 'txt_emph1'}):
print(definition.get_text())
'Programming Language > Python' 카테고리의 다른 글
[Python] TF-IDF, Cosine Similarity (0) | 2022.03.28 |
---|---|
[Python] 웹 크롤링 & 자연어 처리 (2) (0) | 2022.03.25 |
[Python] googlemaps를 사용해서 각 경찰서의 위도, 경도 정보를 얻기 (0) | 2022.03.24 |
[Python] 데이터 시각화 (지도/ Folium, GeoJSON) (0) | 2022.03.24 |
[Python] pandas, seaborn 실습 (0) | 2022.03.23 |
Comments