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 설치하고서 간단하게 구현했다.

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





2024년 첫번째 도서 리뷰 GPT-4를 활용한 인공지능 앱 개발

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." 24년 첫 도서 리뷰이다. 작년까지? 한참 핫 했던 인공지능 서비스 Chat GPT에 관한 책이다. 핑계지만 어쩌다보니 GPT에 대한 접근이...