파이썬 3 예제이다.


파이썬 2의 subprocess의 결과는 이전에는 string이었지만 python2.6? 또는 python 3부터는 bytes로 리턴한다.

TypeError: startswith first arg must be bytes or a tuple of bytes, not str 이런 에러가 난다면 이슈이다.



이해가 되는 예시이다. 



>>> print(subprocess.Popen("echo hellow", shell=True, stdout=subprocess.PIPE))

b'hellow\n'


>>> print(subprocess.Popen("echo hellow", shell=True, stdout=subprocess.PIPE))

<subprocess.Popen object at 0x10cfb2908>


>>> print(subprocess.Popen("echo hellow", shell=True, stdout=subprocess.PIPE).communicate())

(b'hellow\n', None)


>>> print(subprocess.Popen("echo hellow", shell=True, stdout=subprocess.PIPE, universal_newlines=True).communicate()[0])

hellow



>>> print(subprocess.Popen("echo hellow", shell=True,stdout=subprocess.PIPE).communicate()[0].decode('utf-8').strip())

hellow





마찬가지로..subprocess 모듈의 check_out도 바이트이기에..


status = subprocess.check_output(cmd.split()).rstrip() 코드는




print(subprocess.check_output(cmd.split()).decode('utf-8').rstrip()) 로 변경하면 string으로 리턴한다.







<참고 예시>


import subprocess

import paramiko

cmd = "vagrant ssh-config vagrant2"

p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, universal_newlines=True)

config = paramiko.SSHConfig()

config.parse(p.stdout)

config.lookup("vagrant2")



Posted by '김용환'
,


몇 년 전에 카카오에서 함께 일한 charsyam(강대명 님 영어 이름)은 참 파이썬을 잘 했다. 물론 스칼라, 자바 모두 잘했다.


그런데. 루비로 만들어진 스크래퍼를 잘 다뤘다. 스크랩 관련 코드를 살펴보고 charsyam과 얘기하고 ㅎㅎ


og라는 것도 첨 알게 되고. 백엔드만 하다 보니 잘 모르는 것도 많았다.


특이한 timeout 현상에 대해서 charsyam과 얘기할 때 참 희열을 느꼈다. 




open api가 없으면 스크래핑해서 먼가를 구축하고 서비스 메싱 사용해서 원하는 것을 만들어내거나.


실제 스크래핑에 대한 법적 이해, 실제 구현에 대한 Scrapy 라이브러리를 살펴보니. 잼난다. 




파이썬 개발을 종종 하고 있지만, 스크래핑은 첨이라 즐거운 공부가 된 것 같다. 






이 책은 예시 싸이트를 두어서 테스트하기 좋다. 현행화가 되지 않은 부분은 코드를 수정해서 잘 동작되도록 했다. 


스크래핑에 대한 좋은 책이라 생각된다.





http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791161752525&orderClick=LAH&Kc=#N






★ 옮긴이의 말 ★

내가 카카오스토리 개발팀에 일할 때 스크래퍼 툴에 이상한 매력을 느꼈다. 스크래퍼 툴을 사용해 웹을 스크래핑할 때 특정 태그 정보와 사진을 추출해서 사용자들이 스크랩 정보를 글을 작성하기 전에 미리 알 수 있게 하는 매력, 왠지 마력처럼 느껴지기도 했다.


도대체 내부는 어떻게 동작하는 걸까? 옆에서 같이 스크래퍼 툴의 코드를 고쳐보기도 하고 이슈가 생기면 동료들과 같이 보기도 했다. 그렇기 때문에 이 책을 번역하게 돼 매우 기뻤다.
우리가 자주 사용하는 SNS(카카오톡, 페이스북, 카카오스토리, 라인)를 살펴보면, 링크를 보낼 때 링크만 보내지 않는다. 적당한 정보와 사진이 같이 대화창 또는 피드에 노출된다.
사실 스크래핑 기술을 알면 쉽게 구현할 수 있지만 스크래핑 기술을 배우고 싶어도 서버 관리자가 스크래핑 기술을 쓰지 못하도록 제한을 거는 경우가 많다. 그래서 이 책은 정말 특별하다. 저자가 운영 중인 예시 웹 사이트를 기반으로 웹 스크래핑 기술을 배울 수 있기 때문에 마음껏 예시를 테스트할 수 있다.

이 책은 크롤링과 스크래핑이 무엇인지 설명하고 법적 이슈를 다루며 시작한다. 웹 사이트에서 데이터를 스크래핑할 수 있는 최고의 가이드를 제공한다. 저자가 운영하는 예시 웹 사이트를 기반으로 스크래핑 테스트를 진행할 수 있다. 정적 웹 페이지에서 데이터를 추출하는 방법, 레디스와 파일을 캐싱으로 사용하는 방법, 동적 스크래핑 및 정교한 크롤러를 개발하는 방법을 다룬다. 그리고 PyQt와 Selenium을 사용하는 방법, 캡차(CAPTCHA)로 보호되는 복잡한 웹 사이트에 폼을 제출하는 방법, 병렬 라이브러리를 사용하는 방법, Scrapy 라이브러리로 클래스 기반 스크래퍼를 생성하는 방법을 다룬다.
이 책은 독자가 파이썬에 대한 기본 지식이 있다고 가정하기 때문에 파이썬 언어에 대한 설명은 없다. 하지만 Golang, 자바, 스칼라 등과 같은 언어에 대한 지식이 있다면 도전해 볼 수 있을 것이다.
원서의 버전은 파이썬 3.4 기준이었지만 번역서에서는 최신 버전인 파이썬 3.7과 바뀐 예시 사이트 URL을 기반으로 예시 소스를 일부 변경했다.

이 책에서 스크래핑에 대한 지식을 많이 얻기를 바란다. 



* 원서 링크





https://www.packtpub.com/big-data-and-business-intelligence/python-web-scraping-second-edition




Python Web Scraping - Second Edition

Katharine Jarmul, Richard Lawson

7 customer reviews








Python Web Scraping: Hands-on data scraping and crawling using PyQT, Selnium, HTML and Python, 2nd EditionPaperback – May 30, 2017




Posted by '김용환'
,



13번째 번역책을 내어놓게 되었다. 나에게는 2018년 초 A형 독감을 안겨주었지만, 


아프기도 하고 포기하기도 싶었지만..


인내를 배우고, 또 인내를 배우며.


번역서 기준 1000페이지가 넘는 책을 내어놓게 되었다.




나에게 스칼라, 특히 스파크를 통해 해볼 수 있는 것이 무엇인지 잘 알려준 책이다. 


이미 회사에서 스칼라/스파크 개발을 통해 뼈를 깎는 고통이 무엇인지 알기에.. 이 책을 통해 조금이나마 나와 같은 분들이 그 시간을 빨리 지나가도록 도움을 주면 좋을 것 같다.




Aggregation, 많은 머신러닝 / 통계 책을 보면서 갈급했던 내용들(어떤식으로 엔지니어링(API화)한 것이 무엇인지)이 참 좋았다. 



머신 러닝에 대한 내용들이 조금 어렵긴 하지만 좋은 가이드를 주는 좋은 책이라 생각된다. 파이팅!!


엔지니어, 프로그래머도 스파크를 통해 머신 러닝/추천 시스템을 쉽게 개발할 수 있으리라 믿는다. 





http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791161752402&orderClick=LET&Kc=#N





★ 옮긴이의 말 ★ 

하둡 맵리듀스(Hadoop MapReduce) 프로그래밍은 최근 몇 년 동안 잘 사용되고 있습니다. 또한 데이터가 저장된 하둡 분산 파일 시스템을 기반으로 하는 분석, 추천 프로그래밍은 하둡 내부에서만 가능했기에 개발자들이 하둡 인터페이스를 사용해 개발해야 했습니다. 그러나 일반 개발자가 이해하기 어려운 개념과 인터페이스가 있어 하둡과 하둡 맵리듀스를 잘 이해하는 개발자가 전문적으로 개발하곤 했습니다. 일반 개발자들이 쉽게 분석할 수 있도록 아파치 하이브(Hive) 등 다양한 하둡 관련 프레임워크가 사용되기 시작했습니다. 그러나 여전히 유연하지 않을 뿐 더러 하둡 맵리듀스 개발은 변화되지 않았고, 테스트 코드 개발 역시 쉽지 않았습니다. 하둡 프로그래밍의 약점은 대용량 데이터에 대한 실시간 처리입니다. 따라서 하둡 대신 실시간 데이터를 처리하는 메시징 큐(예, 카프카)를 사용하고 있습니다. 그러다 보니 스트리밍 처리를 처리하기 위해 아파치 스톰(Apache Storm), 스파크 스트리밍(Spark Streaming), 아파치 플링크(Apache Flink) 등 많은 오픈 소스가 쓰이고 있습니다. 
저는 현업 개발자이지만 다양한 NoSQL, 대용량, 비즈니스에 관심이 많습니다. 저는 스칼라/스파크를 사용해 애플리케이션을 개발했고, 메소스/마라톤 및 쿠버네티스에서 애플리케이션에서도 애플리케이션을 개발했습니다. 따라서 하둡 맵리듀스 프로그래밍은 스파크로 대체될 것이라는 굳은 믿음이 있습니다. 누구나 스칼라를 제대로 알 수 있다면 하둡 맵리듀스 프로그래밍을 스칼라 기반의 스파크 프로그래밍으로 대체 및 보완할 수 있을 것이라 확신합니다. 
저뿐 아니라 많은 개발자가 하둡 맵리듀스 프로그래밍, 기존 파이프라인 프로그래밍 및 머신 러닝 프로그래밍을 점차 스파크 프로그래밍으로 대체되고 보완하고 있습니다. 스트리밍 처리, 대용량 분석 처리, 추천 시스템 개발, 인메모리 병렬처리, 머신 러닝까지 여러 분야의 애플리케이션을 스파크 하나만 알면 어느 정도 진행할 수 있습니다. 따라서 람다 아키텍처를 스파크로 쉽게 처리할 수 있습니다. 스파크는 CNN과 같은 딥러닝을 지원하지 않지만 텐서플로(Tensorflow)와 쉽게 연동할 수 있습니다. 그리고 스파크는 자바, 스칼라, 파이썬, R 언어를 지원하기 때문에 언어에 대한 부담이 가장 덜합니다. 
특히 스칼라의 함수형 언어의 특징과 데이터프레임을 추상화한 스칼라 기반의 스파크를 활용함으로써 빅데이터를 논리적인 프로그래밍으로 쉽게 처리할 수 있습니다. 많은 개발자가 스스로 공부하며 빅데이터, 머신 러닝의 영역으로 진입하고 있는데 그에 함께 가고 싶습니다. 
이 책은 전반적으로 설명이 많고 그림이 풍부합니다. 특히, 집계 부분은 중요한 내용을 잘 설명하고 있습니다. 저는 이전부터 통계와 머신 러닝을 공부하고 있었는데 실제 스파크 애플리케이션에서 어떻게 연동되는지는 이 책을 통해 잘 이해하게 됐습니다. 머신 러닝을 처음 도전하시는 분에게는 이 책이 좀 어렵다고 느낄 수 있겠지만 많은 도움이 될 것입니다. 빅데이터 분석과 머신 러닝에 대한 많은 내용을 포함한 ‘전과' 같은 이 책이 여러분들에게도 현업에서 큰 도움이 되면 좋겠습니다. 
이 책은 원서와 달리 최신 2.3.2 버전으로 작성됐습니다. 기존의 원서에서 제공하는 코드의 오타와 호환성을 수정해 옮긴이의 github 저장소(https://github.com/knight76/Scala-and-Spark-for-Big-Data-Analytics)를 제공하고 있으니, 참고하시기 바랍니다.




원서  : Scala and Spark for Big Data Analytics: Explore the concepts of functional programming, data streaming, and machine learning

https://www.amazon.com/Scala-Spark-Big-Data-Analytics/dp/1785280848








Posted by '김용환'
,