개발자 도구를 열어보면 화면에 나타나는 정보는
모두 로 만들어진 코드를 분석해서 데이터를 가져오는 과정에 도움을 주는 라이브러리
Beautiful Soup
웹을 구성하는 의 'id''class'와 같은 selector를 분석하여 변수로 사용할 수 있도록 도와주는 라이브러리
정적인 페이지를 크롤링 하는데 사용됩니다.
>>conda create web-scrapping(가상환경을 만들기) >>conda activate web-scrapping >>pip install beautifulsoup4
selenium
브라우저를 실행시켜 동적인 입력이 필요한 웹을 구동할 수 있는 라이브러리
동적인 페이지를 크롤링
예)' 크롤링' 단어 검색 결과 페이지 스크랩
>> conda activate web-scraping >> pip install selenium >> pip install webdriver-manager(웹 드라이버 매니저도 추가적으로 설치)
from bs4 import BeautifulSoup import requests(다른 서버에 요청을 함) import re import csv #1. csv file open #csv_outfile = 'laro_skin.csv' #csv_open = open(csv_outfile, 'w+', encoding='utf-8') #csv_writer = csv.writer(csv_open) #csv_writer.writerow(('category','name','tags','short_desc','price')) crawling_url = "https://www.vogue.co.kr/category/fashion/page/1"(긁어오고 싶은 대상 페이지) response = request.get(crawling_url) -대상 코드가 나옴 print("NOW response.html=", end =""), print(response.text) -개발자 도구에 있는 html내용이 그대로 온다 req = requests.get(crawling_url) html = req.text bs = BeautifulSoup(response.text, 'html.parser')-html을 읽어서 변수로 사용가능 print(bs) #개발자 도구에서 copy하기 category_ list = bs.find('#main > div > div > ul > li > a')#"copy selector한 내용" for word in category_list: print(word.text)
python selenium_examplel.py
import csv import time from bs4 import BeautifulSoup from selenium import Webdiver from webdriver_manager.chrome import chromeDriverManager csv_filename ="sokcho_restaurants_and_tages.csv" csv_open = open(csv_filename, "w+", encodeing='utf-8') csv_writer = csv.writer(csv.open) csv_writer.writerow( ('title','tags') ) query_keyword = input("크롤링 키워드는?") driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get("https://korean.visitkoea.or.kr/main/main.do") time.sleep(4) driver.find_elemet_by_id("btnSearch").click() element = driver.find_element_by_id("inp_search") element.send._keys(query_keyword) driver.find_element_by_link_text("검색").click() full_html = driver.page_source soup = BeautifulSoup(full_html, 'html.parser') time.sleep(4) print(soup) titles = soup.select() tags = soup.select() time.sleep(3) title_list = [title.text fir title in titles]# 동해바다... ,[속초]깔끔하고.. tag_lilst = [tag.set.text.split('#')[1:] for tag_set in tags] #[[강원도,속초,도루묵],[속초숙소,우수숙박.인증숙박][SRT매거진,강원도] print(tag_list) for i, title in enumerate(title_list): #i-> 인덱스(0,1,2....) #title ->요소 for j, tag in enumerate(tag_list[i]): #j ->인덱스 tag -> 강원 print(tag) if j == 0: csv_writer.writerow((title, tag)) else: csv_writer.writerow(('',tag))