2019년 4월 25일 목요일

웹 크라울링(Web Crawling)

코드 원 제작자께서 허락해주셔서 올리게 되는 파이썬 웹 크라울링!

딴게 게시판에서 어느분이 기존 코드 웹 크라울링 코드를 수정해 달라고 글을 올리셨다.
쪽지와 메일이 오가면서 소스를 받고 필요하신 사항을 정리한 후에 수정을해서 드렸다

예전에 자바에서  html 태그 파싱해서 사용한적이 있는데
확실히 파이썬이 그 보다는 수월하게 구현되는것 같다.(파이썬 만세)

간략히 내용을 정리 하자면
먼저 태그 파싱을 위해서 BeautifulSoup  이라는 라이브러리를 사용한다.

아래와 같은 코드로 특정 url의 내용르 받아서 BeautifulSoup 객체로 받아낸다.
soup = BeautifulSoup(source_code_from_URL, 'html.parser', from_encoding='UTF-8')

특정 사이트의 게시판 같은 곳에서 검색한 결과에 대한 글 전체를 가지고 오도록 하는 내용인데 아래와 같이 구현해서 검색 결과에서 글 링크들을 전부 가져 오도록 하고 있다.
(이 부분은 원 제작자분이 구현해 놓으신 부분이다.)
for title in soup.find_all('div', 'table-row'):
    title_link = title.select('a')
    article_URL = title_link[0]['href']
    get_text(article_URL, output_file)

저렇게 가지고 온 링크들을 다시 get_text함수에 넘겨서 내용을 가지고 오도록 하고 있다.
아래가 get_text함수이다.(이것도 원 제작자분이 만드신걸 일부 수정했다.)
def get_text(URL, output_file):
    URL = "http://www.kindernews.net" + URL
    source_code_from_url = urllib.request.urlopen(URL)
    soup = BeautifulSoup(source_code_from_url, 'html.parser', from_encoding='UTF-8')

    title = soup.find('div', "article-head-title") 
    news_date = soup.find("meta", property="article:published_time") 

    content_of_article = soup.find_all('p') 

    output_file.write(str(title)+"\n") 
    output_file.write(str(news_date)+"\n") 
    for item in content_of_article:
        string_item = str(item)
        output_file.write(string_item+"\n")

    output_file.write("\n") 


soup.find나 soup.find_all부분이 흥미로웠다.
div tag나 meta tag나 어떤 형태든 가지고 올 수 있었다.
soup.find('p') 부분의 경우 가지고 와야 할 글이 모두 <p> 태그로 감싸져 있어서 저렇게 구현했다.

요즘 관리일 좀 소홀이 하면서 소소히 계속 개발을 들여다 보고 있는데, 역시 난 관리보다 개발이 적성이 더 맞는건가 싶기도 하고...
그런데 왜 C#은 그렇게 눈에 안들어 오는지...ㅠㅠ

2019년 4월 19일 금요일

PLC RS232통신

LS산전의 PLC장비와 RS232통신을 하여 데이터를 읽어 와야 하는 프로젝트를 진행 중이다.

현장에서 실제 통신할 장비는 라즈베리파이인데 일단 윈도우에서 테스트를 진행 하였다.
어차피 파이썬으로 코딩도 해야 하고... 초반에 PLC와 통신에서 살짝 삽질을 하였다.

메뉴얼에 헤더와 테일 그리고...이걸 명령어라고 해야 하나...하여튼 아래와 같은 설명을 친절히 해 주고 있는데...


232통신 테스트 프로그램으로 해도 안되길래 왜이럴까 했는데 요청시 헤더와 테일에 문자가 뭐 이런... 
거의 써볼일 없는 ASCII와 HEX 덕분에 잠깐 해메었다.
요구프레임의 헤더는 ' ', 테일은 ' ' 이다.


덕분에 고생은 했지만 테스트 프로그램에서도 확인하고 나서 파이썬으로도 잘 되는걸 확인했다.

요것이 파이썬 소스!
import serial


ser = serial.Serial()
ser.baudrate = 9600ser.port = 'COM3'ser.open()

print(ser.name)
ser.write(b' 00RSS0107%DW0400 ')
result = ser.read_until(b' ')
print("result = ", result)

print("decode=", result.decode("ascii"))

ser.close()
print("ser is open=", ser.is_open)
pySerial 설치하고서 간단하게 구현했다.

이제 이 기본소스로 열심히 노가다 하는 일만 남은...
아...계약부터 하고나서 시작해야 하겠구나...ㅠㅠ





2019년 3월 14일 목요일

Raspberry Pi 한글 설정

드디어...한번만에 성공했다.

순서는
1. 폰트 설치
apt-get install fonts-unfonts-core

2. ibus설치
apt-get install ibus

3. ibus 한글 설치
apt-get install ibus-hangul

4. 이후 설정에서 변경

대략 이 순서인듯 하다.

다만 다음번에도 성공한다는 보장을 할수가 없다.

2019년 3월 13일 수요일

라즈베리파이 기본 설정

일하다보니 어쩌다보니...
라즈베리파이로 이것저것 구현할 일이 많아 지고 있다.
잘 셋팅된 SD카드 하나 이미지 떠놓고 사용하려고 하긴 하지만
한글 설정같은 기본적인건 좀 기록을 해두어야 할거 같다.

먼저 폰트 설치
sudo apt-get install fonts-unfonts-core

iBUS 한글 설치
sudo apt-get install ibus-hangul

그 외 기타 설정사항들은 간단해서 생략!

이제 한글 입출력만 잘 되면 되는데...
잘 안된다...대부분 이거던데...

사실 지난번에 검색해서 했던게 잘 되었는데 그때 이후로 성공한적이 없다.
뭔가 빠진게 있거나 순서가 문제거나 한게 아닐까 싶다.

특히 대부분 ibus 데몬이 실행중이 아니라는 오류가 난다.
뭐가 문제일까....

2018년 8월 24일 금요일

jersey-media-multipart version problem

포터블 리눅스에서 openjdk10, eclipse photon으로 REST구현중에 문제인데 결국 버전문제였다.

Jersey JAX-RS 2.1 에 jersey-media-multipart-2.17를 사용했는데 계속해서 에러 발생...

결국 검색 끝에 jersey-media-multipart-2.27버전으로 변경하였더니 문제가 해결 되었다.

JAVA9버전부터는 activation문제도 있다.
activation.jar - 9버전부터 뭔가 빠졌다는 설명을 보긴 했는데 정확한 기억은...
어찌되었건 https://www.oracle.com/technetwork/java/jaf11-139815.html 여기서 다운받아서 추가 해주어야 한다.

그리고 jersey-media-multipart를 사용 하려면 mimepull도 있어야 한다.

여튼 뭔가 바뀔때 마다 삽질은 필수인듯 하다.

2017년 1월 24일 화요일

Car Dock 앱 출시

결국 발디자인 앱을 출시하였다.


부디 에러나 버그가 없기를 ㅠㅠ

2017년 1월 16일 월요일

Car Dock beta test

회사에서 진행중인 프로잭트에 사용하게 될 앱인데
내 편의를 위해서 먼저 만들어 보고 있다.
기본적으로 나에게 필요한 기능들을 위주로 만들고 있는데
베타 테스트를 진행 하면서 기능수정을 해볼까 한다.

그나저나...역시 앱은 디자인의 비중이 ㅠㅠ


2024년 여섯번째 도서 리뷰 [무엇이 1등 팀을 만드는가]

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다. 올해의 마지막 서평이다. 무엇이 1등 팀을 만드는가.... 시작하기에 앞서 제목이 과하지 않은가 하는 생각이 든다. 1등 팀이라....예전 어느 개그 프로에서 ...