티스토리 뷰

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/python
#-*- coding:utf-8 -*-
from time import sleep
import re
import urllib2
 
url = "http://trillion.tribal.kr?page=index.php"
 
def datasort(data):
    del data[0]
    del data[1]
 
    temp = data[1]
 
    temp = re.findall(r"<a *href=\"(.+)\">[\s]*([\w\W]+?)[\s]*</a>", temp)
 
    del data[1]
 
    data.insert(1, url + temp[0][0])
    data.insert(2, temp[0][1])
 
    return data
 
def sender(data, oldnum):
    message = ""
    max_num = 0
    count = len(data)
 
    for i in range(count, 0-1):
        max_num = int(data[i-1][0], 10)
        if max_num > oldnum:
            message = "here.\n\nNew Notice\n"
            message += "Num. {0}\n".format(max_num)
            message += "Title : {0}\n".format(data[i-1][2])
            message += "Writer : {0}\n".format(data[i-1][3])
            message += "Time : {0}\n".format(data[i-1][4])
            message += "Link : {0}\n".format(data[i-1][1])
            print message
 
    return max_num
 
def parser(data):
    table_summary = "<table ~~~~~>"
    table = data.split(table_summary)[1].split("</table>")[0]
 
    row = list()
    for i in range(2len(table.split("<tr>")), 1):
        temp = table.split("<tr>")[i].split("</tr>")[0]
 
        if temp.find("alt=\"new\""== -1:
            continue
        else:
            row.append(temp)
 
    column = list()
    exp = re.compile(r"<td ?[ a-zA-Z\"=]+|>([\w\W]+?)</td>")
    for i in range(0len(row), 1):
        temp = re.findall(exp, row[i])
        temp = datasort(temp)
        column.append(temp)
 
    return column
 
if __name__ == "__main__":
    g_num = 0
 
    while(1):
        req = urllib2.Request(url)
        s = urllib2.urlopen(req)
 
        data = s.read()
        parse_data = parser(data)
        m_num = sender(parse_data, g_num)
        if m_num != 0:
            print "Notice transfer Success"
            g_num = m_num
        else:
            print "No new notice"
 
        print "Max Num : {0}".format(g_num)
 
        s.close()
        sleep(300)
cs

※ 위의 예제의 URL과 Table은 임시로 채워넣은 것이며, 특정 사이트를 대상으로 만든 것이기 때문에 재사용하기 어려운 코드입니다. (참고하기 어렵지만, 참고용 예제로 만든 것)


1. table은 대충 파싱할 Table 시작 부분을 긁어와 split으로 판을 쳐줌

2. column 부분은 섬세하게 필요한 부분만 파싱해야 하기 때문에 정규식을 이용해 파싱

3. 파싱한 데이터들을 저장하고 리스트에서 필요없는 부분을 제거해서 정리해줌

4. 리스트에서 원하는 부분만을 가져와 사용하면 됨

5. 5분마다 새로운 글을 확인해서 출력하는데 재시작할 경우에는 변수가 싹 날아가니, 다시 전부 보낼수도 있음(파일 입출력으로 관리하면 매우 쉽게 해결 가능)


결과 화면

돌려보면 잘 돌아간다.


python 정규식 참고 블로그

사람들이 정규식, 정규식 하는 소리가 파싱할 때 나오는 소리였다. 항상 메모리를 파싱하거나 String들을 대충 파싱하다가 새로운걸 하게 되니 재밌었다.

'Programming > Python' 카테고리의 다른 글

Windows python 모듈 설치 정리  (0) 2017.10.01
Windows Python 환경 변수 등록 및 pip 설치  (0) 2017.10.01
Python 모듈별 정리본  (0) 2016.09.12
Python Eggshell  (0) 2016.08.25
ctypes 모듈 개인 정리  (0) 2016.04.30
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31