o
    ]iX                  	   @   s*  d Z ddlZejjdd ddlZddlZddlmZ ddlZddl	Z	ddl
Z
ddlZddlmZ eejj e
je
jeZdd Zd(d
dZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdefdefdefdefd efd!efd"efd#efd$Zd%d& Z e!d'kre   dS dS ))uO  
台灣不動產估價師公會名單抓取工具

支援公會：
- 台北市：http://www.reaa.org.tw/
- 新北市：http://www.tcarea.url.tw/
- 桃園市：https://www.tarea.org.tw/
- 台中市：http://www.creaa.org.tw/
- 台南市：http://www.tnreaa.org.tw/
- 高雄市：http://www.karea.org.tw/
- 全聯會：http://www.rocreaa.org.tw/

使用方式：
    python -X utf8 scraper.py              # 抓取所有公會
    python -X utf8 scraper.py taipei       # 只抓取台北市
    python -X utf8 scraper.py --list       # 列出支援的公會

建議每月執行一次更新。
    Nutf-8)encoding)BeautifulSoup)datetimec                 C   s|   |  d}i }|D ]2}| d}tdt|d dD ] }|| jdd}||d  jdd}|r:|dkr6d	}|||< qq	|S )
uA   解析標準 list_form 表格（台北、台中、台南格式）trtdr         Tstripu   開業事務所	   事務所)find_allrangelenget_text)tablerowsmemberrowcellsikeyvalue r   YC:\Users\User\Documents\GitHub\Research_zoo\projects\taiwan-appraiser-registry\scraper.pyparse_standard_table'   s   

r      c                 C   s   g }t  }d}||kr}|  d| }tj|ddd}d|_t|jd}|jdd	d
}|s/	 |S d}	|D ],}
t|
}|r_d|v r_|ddd |dd }||vr_|| |	| |	d7 }	q3|	dkrg	 |S t
|dk rp	 |S |d7 }td ||ks|S )u!   抓取標準分頁結構的名單r   z?page=F   ZverifyZtimeoutr   html.parserr   	list_formclass_r      姓名   會員編號 _
   皙?)setrequestsgetr   r   textr   r   addappendr   timesleep)base_urlZ	max_pagesall_membersseen_idspageurlresponsesouptablesZ	new_countr   r   	member_idr   r   r   fetch_standard_pages7   s@   


r:   c                 C   sN  t d i }td}|D ]}| |d< qtjtd}g d}t|dddd	}tj||d
d}|	  |
| W d   n1 sBw   Y  t dt| d t||d< td}|D ]}	| |	d< q]tjtd}g d}t|dddd	}tj||d
d}|	  |
| W d   n1 sw   Y  t dt| d t||d< d}
tj|
ddd}d|_t|jd}|jddd}g }|D ]}t|}|rd|v rd|d < | |d< || qtjtd!}g d"}t|dddd	}tj||d
d}|	  |
| W d   n	1 sw   Y  t d#t| d t||d$< |S )%u   抓取台北市公會u'   【台北市不動產估價師公會】z*http://www.reaa.org.tw/member_namelist.php   更新時間ztaipei_appraisers.csvr#   r$      聯絡電話   傳真   電子信箱r      地址r;   wr%   	utf-8-signewliner   ignore
fieldnamesextrasactionN     估價師會員:     位membersz-http://www.reaa.org.tw/member_namelist_02.phpztaipei_assistants.csv)r#   r=   r   r@   r;   u     估價助理員: 
assistantsz.http://www.reaa.org.tw/supervisor_namelist.phpFr   r   r   r   r   r    r!   r#      現任   屆別ztaipei_supervisors.csv	r#      職稱r=   r>   r?   r   r@   rN   r;        理監事: supervisors)printr:   ospathjoin
OUTPUT_DIRopencsv
DictWriterwriteheader	writerowsr   r*   r+   r   r   r,   r   r   r.   )update_timeresultsrK   moutput_filerG   fwriterrL   ar5   r6   r7   r8   rR   r   r   r   r   r   scrape_taipei]   sb   


rd   c                 C   s  t d d}tj|ddd}d|_t|jd}| }|d}g }i }|D ]}| }|s/q&t	
d	|rPt|d
k rP|drK|d dkrK|| d|i}q&|drk|dskt|dkrjt|dkrj||d< q&|dr~|ds~d|v r}||d< q&|dr|dst	
d|r||d< q&|dr|dsd|v sd|v r||d< q&|dr|d dkr|| dd |D }|D ]}	| |	d< qtjtd}
g d}t|
dddd}tj||d d!}|  || W d"   n1 sw   Y  t d#t| d$ d%t|iS )&u   抓取新北市公會u'   【新北市不動產估價師公會】z-http://www.tcarea.url.tw/product_1244107.htmlFr   r   r   r   
z^\d+$r   r#   u   會員   序號r	      r   u   不動產估價師r=   z^0\dr@   	   新北市	   台北市c                 S   s$   g | ]}| d r| dr|qS )r#   r   )r+   ).0r_   r   r   r   
<listcomp>   s   $ z$scrape_newtaipei.<locals>.<listcomp>r;   znewtaipei_appraisers.csv)rf   r#   r   r=   r@   r;   rA   r%   rB   rC   rE   rF   NrI   rJ   rK   )rS   r*   r+   r   r   r,   r   splitr   rematchintr.   r   rT   rU   rV   rW   rX   rY   rZ   r[   r\   )r]   r5   r6   r7   r,   linesrK   Zcurrent_memberliner_   r`   rG   ra   rb   r   r   r   scrape_newtaipei   s^   




rr   c                 C   s.  t d d}tj|ddd}d|_t|jd}|d}|d	}g }g }t|D ])\}}	|	d
dg}
dd |
D }|dkrB|}q)t	t
||}| |d< || q)tjtd}g d}t|dddd}tj||dd}|  || W d   n1 sw   Y  t dt| d dt|iS )u   抓取桃園市公會u'   【桃園市不動產估價師公會】z$https://www.tarea.org.tw/list/MemberFr   r   r   r   r   r   r   Zthc                 S   s   g | ]}|j d dqS )Tr
   )r   )rj   cr   r   r   rk      s    z"scrape_taoyuan.<locals>.<listcomp>r   r;   ztaoyuan_appraisers.csv)u   會號r#   u   證書字號u   事務所名稱u   開業執照地址r;   rA   r%   rB   rC   rE   rF   NrI   rJ   rK   )rS   r*   r+   r   r   r,   findr   	enumeratedictzipr.   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r   )r]   r5   r6   r7   r   r   rK   Zheadersr   r   r   valuesr   r`   rG   ra   rb   r   r   r   scrape_taoyuan   s4   

ry   c                 C   s  t d i }td}t }g }|D ]"}|ddd |dd }||vr3|| | |d< || qtjt	d}g d	}t
|d
ddd}	tj|	|dd}
|
  |
| W d   n1 scw   Y  t dt| d t||d< d}tj|ddd}d|_t|jd}|jddd}g }|D ]}t|}|rd|v rd|d< | |d< || qtjt	d}g d}t
|d
ddd}	tj|	|dd}
|
  |
| W d   n1 sw   Y  t d t| d t||d!< |S )"u   抓取台中市公會u'   【台中市不動產估價師公會】z+http://www.creaa.org.tw/member_namelist.phpr$   r%   r&   r#   r;   ztaichung_appraisers.csvr<   rA   rB   rC   rE   rF   NrI   rJ   rK   z/http://www.creaa.org.tw/supervisor_namelist.phpFr   r   r   r   r   r    r!   rM   rN   ztaichung_supervisors.csvrO   rQ   rR   )rS   r:   r)   r+   r-   r.   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r   r*   r   r   r,   r   r   )r]   r^   rK   r3   unique_membersr_   r9   r`   rG   ra   rb   r5   r6   r7   r8   rR   r   r   r   r   r   scrape_taichung   sX   


r{   c                 C   s   t d td}|D ]}| |d< q
tjtd}g d}t|dddd	}tj||d
d}|	  |
| W d   n1 s@w   Y  t dt| d dt|iS )u   抓取台南市公會u'   【台南市不動產估價師公會】z,http://www.tnreaa.org.tw/member_namelist.phpr;   ztainan_appraisers.csvr<   rA   r%   rB   rC   rE   rF   NrI   rJ   rK   )rS   r:   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r   )r]   rK   r_   r`   rG   ra   rb   r   r   r   scrape_tainan-  s   
r|   c                 C   s  t d g }tddD ]}d| }tj|ddd}d|_t|jd	}|jd
dd}|s. nb|D ]Y}i }|jd
dd}	|	rE|	j	dd|d< |jd
dd}
|
D ]0}|jd
dd}|jd
dd}|r~|r~|j	dd}|j	dd}dddd}|||}|||< qN|dr|
| q0td qt }g }|D ]}|d }||vr|| | |d< |
| qtjtd}g d}t|dddd}tj||d d!}|  || W d"   n1 sw   Y  t d#t| d$ d%t|iS )&u*   抓取高雄市公會（卡片式結構）u'   【高雄市不動產估價師公會】r      z/http://www.karea.org.tw/member_roster.php?page=Fr   r   r   r   ZdivZmsgridsr!   ZtitlesTr
   r   ptxtt1t2r#   r@      網址)u	   估價師u   事務所地址u   事務所網址r(   r;   zkaohsiung_appraisers.csv)r#   r=   r>   r?   r   r@   r   r;   rA   r%   rB   rC   rE   rF   NrI   rJ   rK   )rS   r   r*   r+   r   r   r,   r   rt   r   r.   r/   r0   r)   r-   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r   )r]   r2   r4   r5   r6   r7   ZcardsZcardr   titleZptxtsr~   r   r   r   r   Zkey_mapZ
seen_namesrz   r_   namer`   rG   ra   rb   r   r   r   scrape_kaohsiungA  s`   




r   c                 C   s   t d d}tj|ddd}d|_t|jd}|jdd	d
}g }|D ]}t|}|dr?| |d< || t d|d   q"t	j
td}g d}	t|dddd}
tj|
|	dd}|  || W d   n1 sow   Y  dt|iS )u   抓取全聯會公會名錄u   【全聯會公會名錄】z-http://www.rocreaa.org.tw/member_namelist.phpFr   r   r   r   r   r    r!      公會名稱r;   z  - zassociations.csv)r   r=   r>   r?   r@   r;   rA   r%   rB   rC   rE   rF   Nassociations)rS   r*   r+   r   r   r,   r   r   r.   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r   )r]   r5   r6   r7   r8   r   r   assocr`   rG   ra   rb   r   r   r   scrape_associations{  s,   

r   c                 C   s  t d d}| d}tj|ddd}d|_t|jd}d	d
dddddddddddddddddddddddddd d!dd"d#d$d%dd&d'd(d)dd*d+d,d-dd.d/d0d1dd.d2d3d4dd.d5d6d7dd8d9d:d;dd<d=d>d?dd@dAdBdCdd@dDdEdFddGdHdIdJdg}g }|D ]}|dK |dL |dM dNdNdNdO| dP}|dQr*zi| dR|dQ  }	tj|	ddSd}
d|
_t|
jd}|
j}tdT|}|r|dU|dV< tdW|}|r|dU	dXdY	dZdY}||d[< td\|}|r|dU}t
d]|}|r|d^ |d_< td` W n ty) } zt da|dL  db|  W Y dc}~ndc}~ww || t da|dL  dd|dK  de|dVdf  qtjtdg}g dP}t|dhdNdidj}tj||dkdl}|  || W dc   n	1 suw   Y  t dmt| dn t do dpt|iS )qu9   抓取中台灣公會理監事名單（含詳細頁面）u'   【中台灣不動產估價師公會】zhttps://ctreaa.org.twz
/team.htmlFr   r   r   r   u	   理事長u	   邱仕皇zCHIU SHIH-HUANGzmanager_3.html)positionr   eng_namedetail_pageu   副理事長兼公關主委u	   林筱涵zLIN HSIAO-HANzmanager_4.htmlu   副理事長兼專案主委u	   劉獻隆zLIU HSIEN-LUNGzmanager_5.htmlu   名譽理事長u	   黃昭閔zHUANG CHAO-MINGzmanager_6.htmlu   常務監事u	   江東融zCHIANG TUNG-JUNGzmanager_7.htmlu	   秘書長u	   宋明一zSUNG MING-YIzmanager_8.htmlu   理事兼襄閱主委u	   李順吉zLEE SHUN-CHIzmanager_9.htmlu   理事兼估價技術主委u	   陳永洲zCHEN YUNG-CHOUzmanager_10.htmlu   理事兼活動主委u	   廖家顯zLIAO CHIA-HSIENzmanager_11.htmlu   理事u	   陳順傑zCHEN SHUN-CHIEHzmanager_12.htmlu	   姚承欣zYAO CHENG-HSINzmanager_13.htmlu	   邱盟文zCHIU MENG-WENzmanager_14.htmlu   監事兼紀律主委u	   朱俶瑩zCHU CHU-YINGzmanager_15.htmlu   監事兼市場資訊主委u	   張順奇zCHANG SHUN-CHYIzmanager_16.htmlu   副秘書長u	   林秀青zLIN HSIU-CHINGzmanager_17.htmlu	   鄭春輝zJHENG CHUN-HUEIzmanager_18.htmlu   副秘書長兼教育主委u	   劉冠于zLIU GUAN-YUzmanager_19.htmlr   r   r   r%   rM   )rP   r#   u	   英文名r      學歷   證照rN   r;   r   /r'   u&   事務所名稱:\s*['\"]([^'\"]+)['\"]r   r   u   學歷:\s*['\"]([^'\"]+)['\"]z<br/>u   ；z<br>r   u   證照:\s*\[([^\]]+)\]z['\"]([^'\"]+)['\"]r   r   r(   z    u    詳細頁面抓取失敗: Nz (z) - u   未知zctreaa_supervisors.csvrA   rB   rC   rE   rF   rQ   u    位（含詳細資訊）uI     (註：此公會網站無會員名單，需從政府開放資料取得)rR   )rS   r*   r+   r   r   r,   rm   searchgroupreplacefindallr/   r0   	Exceptionr.   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r   )r]   r1   Zteam_urlr6   r7   Zsupervisors_datarR   dataZ
supervisorZ
detail_urlZdetail_respZdetail_soupZhtmlZoffice_matchZeducation_matchZ	educationZlicense_matchZlicenses_rawZlicenseser`   rG   ra   rb   r   r   r   scrape_ctreaa  s   

$
,r   ri   rh   u	   桃園市u	   台中市u	   台南市u	   高雄市u	   中台灣u	   全聯會)taipei	newtaipeitaoyuantaichungtainan	kaohsiungctreaar   c            	      C   s  t  d} ttjdkrdtjd  }|dkr4td t	 D ]\}\}}td| d|  q!d S |tv rWt| \}}td| d td	|   td
 ||  d S td|  td d S td td	|   td
 d}t	 D ]3\}\}}z|| }d|v r||d 7 }W n t
y } ztd|  W Y d }~nd }~ww t  qytd
 td| d td|   d S )Nz%Y-%m-%d %H:%M:%Sr   z--listu   支援的公會：z  z: u   抓取 u    名單u   更新時間：z2==================================================u   未知參數: u#   使用 --list 查看支援的公會u0   台灣不動產估價師公會名單抓取工具r   rK   u
     錯誤: u   總計抓取: u    位估價師u   更新時間: )r   nowstrftimer   sysargvlowerrS   SCRAPERSitemsr   )	r]   argr   r   r&   scraperZtotal_membersresultr   r   r   r   main	  sH   r   __main__)r   )"__doc__r   stdoutreconfigurer*   Zurllib3Zbs4r   rY   r/   rT   rm   r   Zdisable_warnings
exceptionsZInsecureRequestWarningrU   dirnameabspath__file__rW   r   r:   rd   rr   ry   r{   r|   r   r   r   r   r   __name__r   r   r   r   <module>   sH   
&=7$8:f,
