본문 바로가기

크롤링

[웹크롤링] 에러가 나는 경우 try / except 문으로 해결하기 웹 페이지를 크롤링할 때, 예를 들어, 텍스트를 추출하는데, 특정 부분에 텍스트가 없다면 에러가 날 수 있습니다. 또는 이미지를 크롤링하기 위해 이미지의 url을 크롤링하는데, 만약 url이 없는 이미지라면 에러가 날 수 있습니다. 이러한 경우 모두 try / except 문으로 코드를 작성하면 해결할 수 있는데요, try 문은 실행 코드를 입력하고 에러가 발생했을 때 멈추지 않고 다른 코드를 수행하도록 할 수 있습니다. 사용방법은 다음과 같습니다. try : 에러가 날 수 있는 코드 except 에러이름 : 에러 발생 시 명령할 코드 else : 에러가 발생하지 않을 때 실행할 코드 한편, 위 코드에서, 에러 이름을 공백으로 두면, 모든 에러에 대해 처리됩니다. 그렇다면, 코드로 어떻게 작성해야 하는지.. 더보기
[웹크롤링] 크롤링 데이터 저장 - 중복되지 않는 폴더 생성 방법 (현재 날짜 / 시간 사용) 대량의 이미지를 크롤링하고 저장하는 경우, 중간에 다시 시작해버리면 덮어쓰기가 돼버려서 이전에 저장했던 이미지가 사라질 수 있는데요, 이러한 경우 어떻게 해야 할까요? 다시 시작할 때마다 폴더의 이름을 바꾸기엔 비효율적일 수 있습니다. 따라서 이에 대한 해결책은 바로 폴더명을 현재 날짜, 시간이 들어가게 만들면 되는데요, 이러한 이름으로 폴더를 만들게 되면 절대 폴더가 중복되지 않습니다. 한편, 현재 시간을 측정하기 위해 time 라이브러리를 사용해야 하는데요, 아래 코드를 보면서 현재 날짜, 시간이 들어간 폴더 생성 방법에 대해 알아보도록 하겠습니다. 먼저, 전체 코드를 보도록 하겠습니다. import time basic_dir = "c:\\test\\" #저장할 기본경로 n = time.localti.. 더보기
[웹크롤링] 텍스트 크롤링 - '\n' 와 같이 불필요한 텍스트 없애기 글이나 뉴스 기사 등을 크롤링할 때, 텍스트 앞 뒤로 '\n' 라는 문자가 같이 출력되는 것을 종종 볼 수 있는데요, '\n'은 줄 바꿈을 의미하는 문자로, 의미가 없기 때문에 삭제하고 저장하는 것이 좋습니다. 한편, '\n'이라는 문자를 없애기 위해 replace 함수를 사용할 수 있는데요, replace 함수는 특정 문자를 다른 문자 또는 공백으로 대체하는 기능을 한답니다. 따라서 '\n' 라는 글자를 아무 문자가 들어있지 않은 ""(공백) 으로 바꾼다면 해당 문자가 삭제되는 것과 같아지게 됩니다. replace() 함수는 replace("바꾸기 전 문자", "바꾼 후의 문자") 로 코드를 작성하면 되는데요, 아래와 같이 '\n' 이 포함된 문자열 str1이 있다고 가정할 때, replace를 이용하.. 더보기
[웹크롤링] 이모티콘, 텍스트나 이미지로 변경해서 크롤링 하는 방법 웹 크롤링을 할 때, 이모티콘의 경우 텍스트로 인식이 되지 않아서 오류가 발생하기도 하는데요, 이러한 경우엔 이모티콘을 다른 글자나 이미지로 변경해서 저장하도록 하는 코드를 작성해야 합니다. 그렇다면 아이콘이나 이모티콘을 글자로 변경하는 코드에 대해서 알아보도록 하겠습니다. - 이모티콘, 텍스트나 이미지로 변경하기 먼저 코드부터 보도록 하겠습니다. bmp_map = dict.fromkeys(range0x1000,sys.maxunicode + 1), 0xfffd) try : title = li.find('div',textcontents) except AttributeError : print(title.replace("\n","") else : title2 = title1.transiate(bmp_map)... 더보기
[웹크롤링] 텍스트 입력 시 글자가 생략되거나 오타가 나는 문제, 해결 방법은? 크롤링할 때, 예를 들어 검색창에 지정된 텍스트를 입력하도록 할 때, 입력 속도가 너무 빨라서 그런지 중간에 오타가 나거나 글자가 생략되는 경우가 있을 수 있습니다. 예를 들어, 아래는 네이버 검색창에 "안녕하세요! 디노랩스 블로그입니다. 언제든지 방문해주세요:D" 라는 텍스트를 작성하는 코드인데요, from bs4 import BeautifulSoup from selenium import webdriver import time path = "c:/temp/chromedriver_240/chromedriver.exe" ###chomedriver의 경로 위치 driver = webdriver.Chrome(path) driver.get("http://naver.com") time.sleep(2) # 2초기달.. 더보기
[웹크롤링] 크롤링 수행 시간 측정하기 - time 크롤링을 수행하는데 걸린 시간을 측정하고 싶다면, time 라이브러리를 사용하여 쉽게 측정할 수 있답니다. 아래 코드를 보면서 살펴보도록 하겠습니다. - time() : 시간 측정하기 time 라이브러리에서 제공하는 time() 모듈은 현재 시간을 나타내는 기능을 하는데요, 크롤링을 하기 전에 시간을 측정하고, 크롤링이 끝났을 때 시간을 측정해 두 시간의 차이를 구하면 얼마나 걸렸는지 알 수 있습니다. 따라서 아래 코드처럼 코드를 입력하면 됩니다. import time start_time = time.time() #시작 시간 # 크롤링 수행 코드 end_time = time.time() #종료 시간 total_time = end_time - start_time #걸린시간 print(total_time) .. 더보기
[웹크롤링] 이미지 크롤링해서 저장하는 방법 - urlib 이미지를 크롤링해서 저장하고 싶다면 urlib 이라는 라이브러리를 통해 이미지를 저장할 수 있습니다. 한편, 이미지는 주로 'src' 태그에 'https://링크~.jpg' 이런 식으로 텍스트로 되어 있는데요, 이 텍스트를 가져온 다음, urlib를 이용하여 폴더에 저장하면 된답니다. 그렇다면, 예시로, 네이버 웹툰 홈페이지에서 아래 이미지와 같이 웹툰의 섬네일을 저장하는 방법에 대해서 살펴보겠습니다. 1. 월요웹툰 페이지 본문 가져오기 이미지를 저장하기 앞서, 먼저 월요웹툰 페이지를 열고, 해당 페이지의 본문을 가져오는 코드를 작성하도록 하겠습니다. from bs4 import BeautifulSoup import requests import urllib.request import urllib url .. 더보기
[웹크롤링] 네이버 - 연관검색어 크롤링하기 (selenium, 크롬 드라이버 사용) 이전 글에서는 requests를 이용해서 검색어에 대한 연관검색어를 크롤링하는 방법에 대해서 살펴보았는데요, 이번 글에서는 selenium과 크롬 드라이버를 이용해서 연관검색어를 크롤링하는 방법에 대해서 살펴보도록 하겠습니다. 1. 필요한 라이브러리 import 하기 from bs4 import BeautifulSoup from selenium import webdriver import time 먼저, 필요한 라이브러리를 설치해줍니다. 이때 selenium 웹 드라이버를 사용했습니다. 2. 크롬 드라이버 경로 설정하기 path = "c:/temp/chromedriver_240/chromedriver.exe" ###chomedriver의 경로 위치 driver = webdriver.Chrome(path) .. 더보기
[웹크롤링] 네이버 - 연관 검색어 크롤링하기 (requests 사용) 네이버에서 원하는 검색어를 입력하면 아래 이미지처럼 홈페이지 맨 하단에 연관 검색어가 나오는데요, 이 연관 검색어를 크롤링해서 저장하는 방법에 대해서 살펴보도록 하겠습니다. (requests를 사용한다는 가정하에 설명드리겠습니다. 크롬 드라이버를 사용한 방법은 다음 글에서 설명드리겠습니다.) 1. 필요한 라이브러리 import 하기 from bs4 import BeautifulSoup import requests 필요한 라이브러리로 BeautifulSoup, requests를 import 해주었습니다. 2. 키워드 입력받고 url, params 설정하기 keyword = input("연관검색어를 찾을 키워드를 입력하세요 : ") url = "https://search.naver.com/search.nav.. 더보기
[웹크롤링] 네이버 - 원하는 검색어가 입력된 페이지 열기 네이버에서 원하는 검색어를 입력한 뒤, 해당 페이지를 크롤링하는 방법은 다양한데요, 그중에서도 주소에 대해 params 값을 설정해서 해당 페이지 html을 가져오는 방법에 대해서 살펴보도록 하겠습니다. (selenium을 사용하지 않고, requests를 사용한다는 가정하에 설명드립니다.) 우선, 전체적인 코드를 보여드리도록 하겠습니다. from bs4 import BeautifulSoup import requests url = "https://search.naver.com/search.naver?" params = { 'where' : 'nexearch', 'query' : '여행', 'fbm' : '0' } resp = requests.get(url,params) soup = BeautifulSou.. 더보기