Ë
    ¸¬uj6'  ã                   óÊ   — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 dZdZddd	d
dœZdZdZdZdZd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zedk(  r e«        yy)u„   
å¹³å®šåŽ¿äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š çˆ¬è™«
http://www.pd.gov.cn/ywdt/ggtz/
TRS CMS, 16é¡µ, 18æ�¡/é¡µ
ä»…çˆ¬å‰�5é¡µ + æ—¥è·‘å¢žé‡�
é    N)ÚBeautifulSoup)Úurljoinu	   å¹³å®šåŽ¿zhttp://www.pd.gov.cn/ywdt/ggtzz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36úwww.pd.gov.cnz?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚHostÚAcceptzAccept-Languagez114.114.114.114é   é   z/mnt/data/search.dbc                  ó˜   — dd l } | j                  t        «      }|j                  d«       |j	                  «        |j                  «        y )Nr   áP  
        CREATE TABLE IF NOT EXISTS gov_raw (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            page_url TEXT UNIQUE,
            title TEXT,
            content TEXT,
            publish_date TEXT,
            site_name TEXT,
            summary TEXT,
            attachments TEXT,
            date_rank TEXT
        )
    )Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcommitÚclose)r   Úconns     ú"/root/gov_crawler/crawl_pd_ggtz.pyÚ	ensure_dbr      s8   € ÛØ�?‰?œ7Ó#€DØ‡L�Lð ô 	ð 	‡K�K„MØ‡J�J…Ló    c                 ó–  — dd l }|j                  t        «      }|j                  d«       d}| D ]:  }	 |j                  d|d   |d   |d   |d   |d   |d	   |d
   |d   f«       |dz  }Œ< |j                  «        |j                  «        |S # t        $ r1}t        d|d   d d › d|› �t        j                  ¬«       Y d }~Œ”d }~ww xY w)Nr   r   zÁ
                INSERT OR REPLACE INTO gov_raw (page_url, title, content, publish_date, site_name, summary, attachments, date_rank)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?)
            Úpage_urlÚtitleÚcontentÚpublish_dateÚ	site_nameÚsummaryÚattachmentsÚ	date_ranké   u     å…¥åº“å¤±è´¥: é2   z - )Úfile)
r   r   r   r   Ú	ExceptionÚprintÚsysÚstderrr   r   )Úitemsr   r   ÚimportedÚitemÚes         r   Ú
save_to_dbr*   2   sõ   € ÛØ�?‰?œ7Ó#€DØ‡L�Lð ô 	ð €HØò Uˆð
	UØ�L‰Lð ð �ZÑ  $ w¡-°°i±À$À~ÑBVØ�[Ñ! 4¨	¡?°D¸Ñ4GÈÈkÑIZðôð ˜‰M‰HðUð 	‡K�K„MØ‡J�J„LØ€Oøô	 ò 	UÜÐ$ T¨*Ñ%5°c°rÐ%:Ð$;¸3¸q¸cÐBÌÏÉ×TÒTûð	Uús   ³7BÂ	CÂ'CÃCc                 óP  — t        t        «      D ]Z  }	 | j                  dd«      }t        j                  |t
        t        |¬«      }|j                  dk(  r|c S |j                  dk(  r yŒ\ y# t        j                  $ r$ |t        dz
  k  rt        j                  d«       Y Œ”w xY w)	u   ç”¨æŒ‡å®šDNSè§£æž�åŸŸå��r   z124.166.241.60)ÚheadersÚtimeoutÚstreaméÈ   i”  Nr   é   )ÚrangeÚRETRIESÚreplaceÚrequestsÚgetÚHEADERSÚTIMEOUTÚstatus_codeÚRequestExceptionÚtimeÚsleep)Úurlr.   ÚattemptÚresolved_urlÚrs        r   Ú	fetch_urlr@   T   s™   € äœ“>ò ˆð
	àŸ;™; Ð8HÓIˆLÜ—‘˜\´7ÄGÐTZÔ[ˆAØ�}‰} Ò#Ø’Ø—‘ #Ò%Ùð &ðð øô ×(Ñ(ò 	Øœ 1™Ò$Ü—
‘
˜1”ùð	ús   ”AA.ÁA.Á.4B%Â$B%c                 ó„   — | syt        j                  dd| «      j                  «       } t        j                  dd| «      } | S )NÚ u*   [-â€“â€”]\s*å¹³å®šåŽ¿[äººæ°‘æ”¿æ”¿åºœ]*\s*z\s+ú )ÚreÚsubÚstrip)r   s    r   Úclean_titlerG   e   s;   € ÙØÜ�F‰FÐ@À"ÀeÓL×RÑRÓT€EÜ�F‰F�6˜3 Ó&€EØ€Lr   c                 ó¨   — t        j                  dt        | «      «      }|r1|j                  d«      j	                  dd«      j	                  dd«      S y)Nz(\d{4}[-/.]\d{1,2}[-/.]\d{1,2})r   ú/ú-ú.rB   )rD   ÚsearchÚstrÚgroupr3   )ÚtextÚms     r   Úextract_date_from_textrQ   m   sE   € Ü
�	‰	Ð4´c¸$³iÓ@€AÙØ�w‰w�q‹z×!Ñ! # sÓ+×3Ñ3°C¸Ó=Ð=Ør   c                 óÜ  — t        | «      }|sy d|_        t        |j                  d«      }d}|j	                  dd¬«      }|r|j                  d¬«      }|s.|j	                  d	«      }|rt        |j                  d¬«      «      }d}|j	                  d
d¬«      }|re|j                  d«      }|D ]O  }	|	j                  d¬«      }
t        j                  d|
«      }|sŒ.|j                  d«      j                  dd«      } n |st        | «      }d}|j                  d«      }|s|j                  d«      }|r–g }|j                  D ]t  }|j                  dk(  r9|j                  d¬«      }|r|j!                  «       dv rŒ9|j#                  |«       ŒK|j                  dk(  sŒ[|j#                  t%        |«      «       Œv dj'                  |«      }g }|rZ|j                  d«      D ]F  }|j)                  dd«      }|sŒ|j+                  d«      sŒ*t-        | |«      }|j#                  |«       ŒH d}|rt        j.                  dd|«      }|d d }||||rt1        j2                  |d¬«      |dœS d|dœS )Núutf-8úhtml.parserrB   Úh3zleader-name©Úclass_T©rF   r   ÚdivÚpropertyÚspanz(\d{4}[-/]\d{1,2}[-/]\d{1,2})r   rI   rJ   z=.view.TRS_UEDITOR, .TRS_UEDITOR, .leader-text .view, div.viewz.leader-text .viewÚp)z&nbsp;rB   Útablez

ÚaÚhref)z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarz<[^>]+>r/   F)Úensure_ascii©r   Úpub_dater   r   r   )r@   Úencodingr   rO   ÚfindÚget_textrG   Úfind_allrD   rL   rN   r3   rQ   Ú
select_oneÚchildrenÚnamerF   ÚappendrM   Újoinr5   Úendswithr   rE   ÚjsonÚdumps)r<   r?   Úsoupr   rU   Ú	title_tagrb   ÚpropÚspansÚsÚtxtrP   Úcontent_htmlÚviewÚpartsÚchildÚinnerr   r^   r_   Úfull_urlr   Ú
clean_texts                          r   Úfetch_detailr|   t   sr  € Ü�#‹€AÙØØ€A„JÜ˜Ÿ™ Ó/€Dð €EØ	�‰�4 ˆÓ	.€BÙ	Ø—‘ $�Ó'ˆÙØ—I‘I˜gÓ&ˆ	ÙÜ 	× 2Ñ 2¸Ð 2Ó >Ó?ˆEð €HØ�9‰9�U :ˆ9Ó.€DÙØ—‘˜fÓ%ˆØò 	ˆAØ—*‘* 4�*Ó(ˆCÜ—	‘	Ð:¸CÓ@ˆAÚØŸ7™7 1›:×-Ñ-¨c°3Ó7�Ùð	ñ Ü)¨#Ó.ˆð €LØ�?‰?ÐZÓ[€DÙØ�‰Ð3Ó4ˆÙØˆØ—]‘]ò 	)ˆEØ�z‰z˜SÒ ØŸ™¨T˜Ó2�Ù §¡£°Ñ ?ØØ—‘˜UÕ#Ø—‘˜wÓ&Ø—‘œS ›ZÕ(ð	)ð —{‘{ 5Ó)ˆð €KÙØ—‘˜sÓ#ò 	-ˆAØ—5‘5˜ Ó$ˆDÚ˜Ÿ™Ð&`ÕaÜ" 3¨Ó-�Ø×"Ñ" 8Õ,ð		-ð €GÙÜ—V‘V˜J¨¨LÓ9ˆ
Ø˜T˜cÐ"ˆð ØØÙFQ”t—z‘z +¸EÔBØñð ð XZØñð r   c                 ód  — | dk(  r
t         › d�}nt         › d| dz
  › d�}t        |«      }|sg S d|_        t        |j                  d«      }g }|j                  dd¬	«      }|sg S |j                  d
«      D ]¸  }|j                  dd¬«      D ]   }|j                  d«      }|sŒ|j                  dd«      }	|	sŒ,t        t         dz   |	«      }
|j                  dd«      xs |j                  d¬«      }|j                  d«      }|r|j                  d¬«      nd}|j                  |
||dœ«       Œ¢ Œº |S )u   èŽ·å�–åˆ—è¡¨é¡µr   rI   z/index_z.htmlrS   rT   rY   zcommon-listrV   ÚulÚliF)Ú	recursiver^   r_   rB   r   TrX   r[   )r<   r   Ú	list_date)ÚBASE_URLr@   rc   r   rO   rd   rf   r5   r   re   rj   )Úpage_numr<   r?   ro   r&   Úlist_divr~   r   r^   r_   Ú
detail_urlr   r[   Údate_strs                 r   Úfetch_list_pager‡   ¼   sB  € à�1‚}Ü�
˜!ˆn‰ä�
˜' (¨Q¡, ¨uÐ5ˆä�#‹€AÙØˆ	Ø€A„JÜ˜Ÿ™ Ó/€Dà€EØ�y‰y˜ }ˆyÓ5€HÙØˆ	à×Ñ Ó%ò ˆØ—+‘+˜d¨e�+Ó4ò 	ˆBØ—‘˜“ˆAÙØØ—5‘5˜ Ó$ˆDÙØÜ ¤¨C¡°Ó6ˆJØ—E‘E˜' 2Ó&Ò@¨!¯*©*¸4¨*Ó*@ˆEØ—7‘7˜6“?ˆDÙ48�t—}‘}¨4�}Ô0¸bˆHØ�L‰LØ!ØØ%ñõ ñ	ðð" €Lr   c                 ó   — g }t        t        › d�«      }|st        d«       |S d|_        t	        j
                  d|j                  «      }|rt        |j                  d«      «      nd}t        d|› �«       | dk(  r|nt        | |«      }t        d|› d	�«       d}d}d}d}	t        d|dz   «      D �]ñ  }
t        d
|
› d|› d�«       t        |
«      }|st        d«       Œ/t        dt        |«      › d�«       |D �]¥  }|dz  }t        |d   «      }|r|d   s;t        d|› d|d   d d › d�«       t        d«       |dz  }|xs |d   |d   ddddœ}nÃt        t	        j                  d|d   «      «      dz   }||z  }|j                  d«      r!t        t!        j"                  |d   «      «      nd}|dkD  r|	dz  }	|j                  d«      xs |j                  d«      xs d}t        d|› d|d   d d › d�«       t        d|› d|dkD  rdnd › d!|› �«       |j%                  |d   |j                  d|d   «      |j                  dd«      |j                  d|d   «      t&        |j                  d"d«      |j                  dd«      |j                  d|d   «      d#œ«       �Œ¨ �Œô |rd$||z  d$z  z
  nd}t        d%«       t        d&|› �«       t        d'||z
  › d(|d)›d*�«       ||z
  dkD  rt        d+|||z
  z  d)›�«       t        d,|	› �«       |S )-NrI   u   æ— æ³•è®¿é—®é¦–é¡µrS   zcreatePageHTML\((\d+)r   u   æ€»é¡µæ•°: r   u   å°†çˆ¬å�–: u    é¡µu	   
--- ç¬¬ u    é¡µ ---u     (ç©º)u     åˆ—è¡¨é¡¹: õ    æ�¡r<   r   z  [z] r   é(   z...u       âš ï¸� ç©ºæ­£æ–‡r�   rB   ra   z\n\nr   rb   z    seg=z
 | attach=ÚYESÚnoz | date=r   )r   r   r   r   r   r   r   r   éd   z
===== DONE =====zTotal: zWith body: z (z.1fz%)z	Avg seg: zAttachments: )r@   r‚   r#   rc   rD   rL   rO   ÚintrN   Úminr1   r‡   Úlenr|   Úfindallr5   rm   Úloadsrj   Ú	SITE_NAME)Ú	max_pagesÚ	all_itemsr?   Ú
page_matchÚtotal_pagesÚpages_to_fetchÚfetchedÚ
empty_bodyÚ	total_segÚtotal_attachÚpageÚ
list_itemsr(   ÚdetailÚ	seg_countÚattach_countr†   Úpercs                     r   Úfetch_all_itemsr£   â   su  € Ø€Iô 	”X�J˜a�.Ó!€AÙÜÐ"Ô#ØÐà€A„Jä—‘Ð3°Q·V±VÓ<€JÙ.8”#�j×&Ñ& qÓ)Ô*¸a€KÜ	ˆK˜�}Ð
%Ô&à$-°¢N‘[¼¸IÀ{Ó8S€NÜ	ˆK˜Ð' tÐ
,Ô-à€GØ€JØ€IØ€Lä�a˜¨!Ñ+Ó,ó $ˆÜ�
˜4˜&  .Ð!1°Ð:Ô;Ü$ TÓ*ˆ
ÙÜ�)ÔØÜ�œc *›oÐ.¨dÐ3Ô4àó 	ˆDØ�q‰LˆGÜ! $ u¡+Ó.ˆFÙ ¨	Ò!2Ü˜˜G˜9 B t¨G¡}°S°bÐ'9Ð&:¸#Ð>Ô?ÜÐ,Ô.Ø˜a‘�
Øò U¨T°'©]ÈÈ[ÑHYØ/1À"ÐQSñ$U‘ô  ¤§
¡
¨7°F¸9Ñ4EÓ FÓGÈ!ÑK�	Ø˜YÑ&�	ØIOÏÉÐTaÔIbœs¤4§:¡:¨f°]Ñ.CÓ#DÔEÐhi�Ø !Ò#Ø  AÑ%�LØ!Ÿ:™: jÓ1ÒP°T·X±X¸kÓ5JÒPÈb�Ü˜˜G˜9 B t¨G¡}°S°bÐ'9Ð&:¸#Ð>Ô?Ü˜  ¨:¸|ÈaÒ?O±eÐUYÐ5ZÐZbÐckÐblÐmÔnà×ÑØ  ™KØŸ™ G¨T°'©]Ó;Ø!Ÿ:™: i°Ó4Ø &§
¡
¨:°t¸KÑ7HÓ IÜ&Ø!Ÿ:™: i°Ó4Ø%Ÿz™z¨-¸Ó<Ø#ŸZ™Z¨
°D¸Ñ4EÓFñ	ö 	ò'	ð$ñL 29ˆ3�*˜wÑ&¨Ñ,Ò-¸a€DÜ	ÐÔ Ü	ˆG�G�9Ð
ÔÜ	ˆK˜ *Ñ,Ð-¨R°°S¨z¸Ð
<Ô=Ø�Ñ˜aÒÜ�	˜) W¨ZÑ%7Ñ8¸Ð=Ð>Ô?Ü	ˆM˜,˜Ð
(Ô)àÐr   c                  ó²  — dd l } | j                  d¬«      }|j                  dt        dd¬«       |j                  dd	d
¬«       |j	                  «       }t        dt        › d�«       t        |j                  dkD  r|j                  nd¬«      }|st        d«       y |j                  s%t        «        t        |«      }t        d|› d�«       y t        d
«       y )Nr   u   å¹³å®šåŽ¿é€šçŸ¥å…¬å‘Š)Údescriptionz--pagesé   u   çˆ¬å�–é¡µæ•°, 0=å…¨éƒ¨)ÚtypeÚdefaultÚhelpz	--skip-dbÚ
store_trueu   è·³è¿‡å…¥åº“)Úactionr©   z===== u    çˆ¬å�– =====)r”   u	   æ— æ•°æ�®u   å…¥åº“: r‰   )ÚargparseÚArgumentParserÚadd_argumentrŽ   Ú
parse_argsr#   r“   r£   ÚpagesÚskip_dbr   r*   )r¬   ÚparserÚargsr•   r'   s        r   Úmainr´   *  s¼   € ÛØ×$Ñ$Ð1HÐ$ÓI€FØ
×Ñ˜	¬°QÐ=UÐÔVØ
×Ñ˜¨L¸~ÐÔNØ×ÑÓ€Dä	ˆF”9�+˜]Ð
+Ô,ä¸¿
¹
ÀQº¨$¯*ª*ÈAÔN€IÙÜˆkÔØà�<Š<ÜŒÜ˜iÓ(ˆÜ�˜˜
 $Ð'Õ(äˆnÕr   Ú__main__)F)r   )Ú__doc__rD   r$   r:   Úosrm   r4   Úbs4r   Úurllib.parser   r“   r‚   r6   Ú
DNS_SERVERr7   r2   r   r   r*   r@   rG   rQ   r|   r‡   r£   r´   Ú__name__© r   r   ú<module>r½      s˜   ðñ÷ × Û Û Ý Ý  à€	Ø+€àPØØOØ0ñ	€ð €
Ø
€Ø
€Ø
€òò(óDò"òòEòP#óLEòPð, ˆzÒÙ…Fð r   