Crawling

주제무·2022년 10월 28일
0

요약

  • 카페 이미지를 얻기 위해서 데이터 크롤링
  • 전국 지역 정보를 이용해 지역별 카페 이미지 추출
  • 전국 지역 정보는 대한민국 행정구역
  • library selenium, beautiful soap를 이용한다.
  • 크롤링을 하기 위해서는 페이지의 html 분석이 필요한데 이게 보기 어렵다.

Crawling

in colab

pip

!pip install selenium
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin

동 정리

서울 행정구역 csv파일을 받고 숫자와 의미없는 문자를 지운다.
Ex> 종로1.2.3.4동 --> 종로동

arr_dong: 전국 행정구역(동까지)

dongs = [dong for dong in arr_dong if '서울특별시' in dong]

arr = []
for dong in dongs:
  dong = dong.replace('.', "")
  arr.append(re.sub('[0-9]', "", dong))
dongs = np.unique(arr)
len(dongs)

webdriver

크롬으로 url에 접속한 뒤 html에서 필요한 정보를 스크랩한다.
아래 코드는 코랩에서 사용하기 위해 필요한 옵션들이다.

from selenium import webdriver
 
options = webdriver.ChromeOptions()
options.add_argument('--headless')        # Head-less 설정
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver', options=options)

headless는 웹창을 띄우지 않기 위해서 넣는다.

페이지 소스

driver.get(url)로 브라우저를 url으로 접속한 뒤
driver.page_source로 html 파일을 얻는다.

경험상 driver.get(url)에서 오류가 나타났을 경우, 새롭게 초기화해야한다. 원인은 모르겠다.

try:
  driver.get(url)
except:
  driver = webdriver.Chrome('chromedrioptions=options)
  continue
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

페이지 소스에서 정보 뽑기

soup.find_all을 이용하여 태그를 통해 정보를 찾는다.
웹프로그래밍을 배우고 있는데 다 도움이 되네!

자세한 것은 크롤링을 진행할 떄마다 보면 좋을 듯 하다.
아래의 주소를 참고하자.
https://hleecaster.com/python-web-crawling-with-beautifulsoup/

cafe_list = [data.text for data in soup.find_all("span", class_="")]
cafe_link = [data.get("href") for data in soup.find_all("a", class_='')]

tqdm

tqdm을 활용해서 sys.stdout을 customizing

잘 모르겠으니, 그냥 가져다 쓸 것!

import sys
from tqdm import tqdm

with tqdm([iter obj], total=len([iter obj]), desc="Crawling", file=sys.stdout) as iterator:
  for data in iterator
    log = [log] # string type
    iterator.set_postfix_str(log)

참고

크롤링을 크롬 개발자 도구로 편하게!
https://youlbe.tistory.com/entry/%EC%9D%B8%ED%84%B0%EB%84%B7-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%82%AC%EC%9D%B4%ED%8A%B8-HTML-%EC%86%8C%EC%8A%A4-%EC%BD%94%EB%93%9C-%EC%89%BD%EA%B2%8C-%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0-%EB%B0%A9%EB%B2%95-%ED%81%AC%EB%A1%AC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%8F%84%EA%B5%AC

0개의 댓글