파이썬을 이용해서 인스타그램의 태그를 크롤링해 보도로 한다.
웹 크롤링은 여러가지 방법과 라이브러리를 이용해서 할 수 있다.
여기서는 최소한의 노력(?) 으로 인스타그램의 사진을 얻어 오도록 해 본다.
우선 github에서 instagram crawler 를 찾아 보도록 하자. 많은 사람들이 자신이 만든 코드를 올려 놓은 것을 알 수 있다.
오늘 사용할 소스는 아래 github repository를 사용하도록 한다.
https://github.com/huaying/instagram-crawler.git
code를 받는 방법은 간단하다. git 을 이용해서 아래와 같이 git clone 을 할 수도 있으며, 홈페이지에서 다운로드 받을 수도 있다. git clone 만 할 줄 알면 여러가지 유용한 코드를 무료로 받을 수 있으니 익혀 두도록 하자.
git clone https://github.com/huaying/instagram-crawler.git
위의 홈페이지에 README.md를 보면 잘 알겠지만. 기본은 크롤링한 데이터를 json 형태로 받아 주고 있다.
이 파일을 받아서 유용하게 사용할 수 도 있지만, jpg 파일을 바로 받고 싶어할 수도 있다.
여기에서는 위의 코드에서 몇줄을 추가하여 내가 원하는 사진을 바로 받는 것을 해 보도록 한다.
위의 코드를 사용하게 되면 아래와 같은 구조를 가진 데이터를 받게 된다. 이 중 사진의 주소는 img_url 키가 가지고 있다.
따라서, 이 키를 가지고 사진을 받는 코드를 추가해 주면 된다.
한 개의 img_url을 포함하는 json data를 받아서 저장하는 코드를 만들어 보자.
1 2 3 4 | def crawl_image_one( x, out_path): fname = x['img_url'].split('/')[-1].split('.jpg')[0] + '.jpg' #print(fname) urllib.request.urlretrieve(x['img_url'], os.path.join( out_path, fname)) | cs |
이제 위의 함수를 여러개의 주소를 한 번에 받는 코드를 작성해 보자.
시간을 줄이기 위해 multi thread로 빠르게 받아 보자.
tqdm을 사용하면 진행 과정을 progressive bar를 통해 쉽게 확인 할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def crawl_and_save(tag, out_path, num=100): # Create when directory does not exist if not os.path.isdir(out_path): os.makedirs(out_path) data_raw = crawler.get_posts_by_hashtag(tag, num) crawler.save_to_json(data_raw, os.path.join(out_path, tag + '.json')) cores = 8 with Pool(cores) as pool: tqdm.tqdm(pool.starmap(crawl_image_one, zip(data_raw, repeat(out_path))), total=len(data_raw)) #df = pd.concat(r) pool.close() pool.join() | cs |
자 거의 다 되었다.
이제 만든 함수를 이용하여 사진을 긁어와 보자.
1 2 3 4 5 | TAG='architectural' out_path='./' + TAG st = time.time() crawl_and_save(TAG, out_path, num=10000) print('tatal time: ', time.time() -st) | cs |
태그 이름이 architectural 인 아름다운 사진 10000장을 긁어 오는 것을 볼 수 있다.
'Machine Learning(머신러닝)' 카테고리의 다른 글
부동산 거래량 (~2019년 03월) (0) | 2019.04.07 |
---|---|
부동산 거래량 과 거래 금액 추이 (0) | 2019.03.25 |
강 인공지능과 약 인공지능 (0) | 2018.09.17 |
Machine learning을 포함한 A.I 구조 (0) | 2018.09.10 |
sklearn model 백업, 재사용 (1) | 2017.12.03 |