archive
웹크롤링 라이브러리 대강 정리하기 본문
1. request 라이브러리
-http 요청을 보낼 수 있는 기능을 제공하는 라이브러리
-서버로부터 응답을 요청하고 html 코드를 받을 수 있음
**html은 뭐고 url은 뭔데?
url은 주소 같은 거고
html은 그 주소의 콘텐츠를 결정짓는 태그로 이루어진 웹 텍스트파일
-request 모듈의 get() 함수는 응답 객체를 돌려줌
이 안에 status_code도 있고 text, url, header 등 다양하게 존재하게 된다.
-request 모듈의 get() 함수를 통해 정보를 불러와 저장한 변수에 .(도트) 연산자를 이용해 요소를 불러올 수 있음
-page.text -> text 요소를 불러올 수 있음
import requests
page=requests.get("https://fhaktj8-18.tistory.com/")
type(page)
>>>
requests.models.Response
>>>
page.text
>>>
'<!DOCTYPE html>\n<html lang="ko">\n <head>\n<link rel="stylesheet" type="text/css" href="https://t1.daumcdn.net/tistory_admin/lib/lightbox/css/lightbox.min.css" /><link rel="stylesheet" type="text/css" href="https://t1.daumcdn.net/tistory_admin/assets/blog/tistory-36f15cbcc77ea9489633a58757c4bb5d194ab57e/blogs/style/content/font.css?_version_=tistory-36f15cbcc77ea9489633a58757c4bb5d194ab57e" /><link rel="stylesheet" type="text/css" href="https://t1.daumcdn.net/tistory_admin/assets/blog/tistory-36f15cbcc77ea9489633a58757c4bb5d194ab57e/blogs/style/content/content.css?_version_=tistory-36f15cbcc77ea9489633a58757c4bb5d194ab57e" /><!--[if lt IE 9]><script src="https://t1.daumcdn.net/tistory_admin/lib/jquery/jquery-1.12.4.min.js">
...
>>>
2. BeautifulSoup
- 웹페이지의 정보를 알아볼 수 있도록 파이썬 용어로 바꿔줘서 쉽게 스크랩을 할 수 있는 기능을 제공하는 라이브러리
-html.parser을 이용해서 파싱을 하게 되면, 파이썬인터프리터가 해석할 수 있는 구조로 html을 만들어줌
# 모든 <li> 태그 선택하기, 괄호 안에 CSS 선택자를 넣으면 특정 HTML 태그만 선택
li_tags = soup.select('li')
# 결과 출력, 리스트로 출력됨
print(li_tags)
>>>
[<li>web crawling</li>, <li>requests</li>, <li>BeautifulSoup</li>]
>>>
# 첫 번째 <li> 태그의 텍스트 출력하기, 해당 태그 안에 있는 텍스트만 추출
print(li_tags[0].text)
>>>
web crawling
>>>
-select 함수를 활용해서 태그 안에 있는 텍스트를 추출하는 코드는 데이터 분석할 때 유용하게 활용된다
-특정 태그의 텍스트를 모두 가져온 리스트를 만들고 싶다면 for 반복문을 활용하면 간단히 해결된다
# 빈 리스트 만들기
study_names = []
# 텍스트 추출해서 리스트에 담기
for li in li_tags:
study_names.append(li.text)
# 결과 출력
print(study_names)
>>>
['web crawling', 'requests', 'BeautifulSoup']
예제
-영화 제목을 가지고 오려면
import requests
from bs4 import BeautifulSoup
movie_name = []
response4=requests.get("https://www.imdb.com/chart/top/?ref_=nv_mv_250")
soup4=BeautifulSoup(response4.text, "html.parser")
movie_tags=soup4.select('div.lister>table.chart.full-width>tbody.lister-list>tr>td.titleColumn>a')
for i in range(len(movie_tags)):
movie_name.append(movie_tags[i].text)
print(movie_name)
# for index, element in enumerate(movie_tags, 1):
# print("{} 위 영화: {}".format(index, element.text))
위에까지는 예제였고
드디어 나도 내 연구를 위한 파싱과 크롤링의 첫 단추를 끼워봄
import requests
from bs4 import BeautifulSoup
url = "https://www.donga.com/news/search?query=IMF&sorting=1&check_news=91&search_date=5&v1=19971201&v2=19980131&more=1"
response = requests.get(url)
# HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')
# URL 추출
urls = []
cards = soup.select('div#dongawrap>div.search_wrap>div#container>div#content>div.sch_cont>div.schcont_wrap>div.result_cont>div.articleList.article_list>div.rightList>span.tit>a')
for card in cards:
url = card['href']
urls.append(url)
for url in urls:
print(url)
그리고 감격스럽게 추출된 url들
여기에 힘입어서 이 url들을 다시 받아서 기사 본문까지 추출해봤음
url = "https://www.donga.com/news/search?query=IMF&sorting=1&check_news=91&search_date=5&v1=19971201&v2=19980131&more=1"
response = requests.get(url)
# HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')
# URL 추출
urls = []
cards = soup.select('div#dongawrap>div.search_wrap>div#container>div#content>div.sch_cont>div.schcont_wrap>div.result_cont>div.articleList.article_list>div.rightList>span.tit>a')
for card in cards:
url = card['href']
urls.append(url)
for url in urls:
print(url)
#####################
# 전체 단어 빈도를 저장할 Counter 객체
total_word_counts = Counter()
for i in urls:
this_url = urls[i]
response = requests.get(this_url)
# HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')
article_body = soup.select_one('div#dongawrap div#view.open_view div#content div.scroll_start01 div.scroll_start01_in div.article_view div#article_txt.article_txt').get_text(strip=True)
print(article_body)
근데 동아일보 html 특성인지는 모르겠는데 (일단 중앙일보는 안 그랬음) 본문이 들어간 html 구조 끝 부분이
이래가지고 도대체 저 (text)만 출력하려면 어떻게 해야되는지 도당체 모르겠음 일단 이건 미해결로 남긴 채 크롤링 코드 만들기 99프로 성공...!
'Data > 파이썬 데이터 처리' 카테고리의 다른 글
쿼리 대강 이해하기 (0) | 2023.07.22 |
---|---|
[Doit!] 3. 데이터 분석 기초 - 데이터 파악 (0) | 2023.05.10 |
[Doit!] 2. 데이터 프레임 이해하기 (0) | 2023.05.09 |
[Doit!] 1. 파이썬 패키지 이해하기 (0) | 2023.05.08 |