161823.py 2.78 KB
Newer Older
1
#!/usr/bin/env python3.7
2 3 4 5
# -*- coding: utf-8 -*-

# https://kldp.org/node/161823

6
import subprocess
7
import re
8

9
class mc:
10
    UIDs = 10 # URL 주소의 범위를 지정하는 값: 유효범위 ===> [1-142]
11
    BASE_URL = "https://qqalba.com/bbs/board.php?bo_table=job&wr_id="
12
    WRITE_MODE = False # 파일에 쓰느냐 그냥 print() 하느냐의 선택
13 14
    
def make_url(id):
15
    """
16 17
    URL 전체 범위: id=[1-142]
    일단 10 페이지만 실험 ===> id=[1-10]
18
    """
19
    id = list(range(1, mc.UIDs+1))
20
    FURL = []
21
    for k in id:
22
        FURL.append("{0}{1}"\
23
                   .format(mc.BASE_URL, str(k)))
24 25 26 27 28

    return FURL

FURL = make_url(id) # FURL 은 반드시 리스트 형식이어야함.

29 30 31 32 33 34 35 36 37 38 39 40 41
class ac:
    def slide(l, n):
        """
        산법(알고리즘) 출처: (익명 사용자님)
        ===> https://kldp.org/comment/631312#comment-631312
        """
        ret = tuple()
        for e in l:
            ret = ret + (e,)
            if len(ret) == n:
                yield ret
                ret = ret[1:]
            
42 43 44 45 46
def get_grep(url): # grep 내부 동작 방식
    p = subprocess.Popen("curl -s '{}'".format(url), \
                         stdout=subprocess.PIPE, text=True, shell=True)
    output = p.stdout.readlines()

47 48 49 50 51 52 53 54 55
    exp = re.compile("id=(.+)$")
    chop = exp.search(url).group(1)
    chop_zfill = chop.zfill(3)
    """
    실제로 찍어보니 없는 URL도 있음.
    그래서 디버깅 차원에서 URL ID 를 목록에 함께 출력되도록 코드를 보완.
    """
    ids = "[uid:{}] ".format(chop_zfill) # 실존하는 URL 의 ID
    
56 57
    t_list = []
    s_list = []
58 59 60
    for k, v in ac.slide(output, 2):
        if "연락처" in k:
            tel = v
61
            t_list.append(tel.strip())
62 63
        if "업소명" in k:
            shop = v
64 65
            s_list.append(shop.strip())

66 67 68
    if mc.WRITE_MODE == True:        
        for v1, v2 in zip(t_list, s_list):
            with open("161823.txt", "a") as f:
69
                f.write("{0}{1}{2}{3}\n".format(ids, v1[4:-5], '\t', v2[16:-5]))
70 71
    else:
        for v1, v2 in zip(t_list, s_list):
72
            print("{0}{1}{2}{3}".format(ids, v1[4:-5], '\t', v2[16:-5]))
73 74 75 76 77 78

# url 을 받아서 grep 수행후 결과 출력.
for url in FURL:
    get_grep(url)

# 편집: Emacs 26.2 (Ubuntu 18.04)
79
# 마지막 갱신: 2019년 7월 5일
80

81
"""
82
실험 환경: 우분투 18.04/ 파이썬 3.7/ curl
83

84 85
결과:
(bionic)soyeomul@localhost:~/test$ ./161823.py
86 87 88 89 90 91 92 93 94 95
[uid:001] 010-8827-7794	가락동 ART2
[uid:002] 010-7654-2119	퀸
[uid:003] 010-2491-2124	안전
[uid:004] 010-4866-9542	Goose Bar
[uid:005] 010-4276-7902	로렌아로마
[uid:006] 010-4044-3727	벤츠
[uid:007] 010-4646-6938	동탄 ♡굿ㆍ향기♡
[uid:008] 010-2123-1522	둘리
[uid:009] 010-4184-5588	BAR11CLUB
[uid:010] 010-4926-1374	꿀다방
96
(bionic)soyeomul@localhost:~/test$ 
97
"""