Ë
    ¡Š£j»!  ã                   ó¢   — d 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Z
dZd	Zd
diZh d£Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uÛ   
æ²…æ±Ÿå¸‚-å»ºè®¾é¡¹ç›®çŽ¯è¯„
http://www.yuanjiang.gov.cn/20839/index.htm
CMS: è‡ªæœ‰CMS (GB2312)
åˆ†é¡µ: index_N.htm (Nä»Ž0å¼€å§‹ï¼Œé¦–é¡µindex.htmï¼Œç¬¬2é¡µindex_1.htm...ç¬¬10é¡µindex_9.htm)
è¯¦æƒ…: content_{id}.html
é    N)Údatetime)ÚBeautifulSoupz/root/gov_crawler/search.dbu   æ²…æ±Ÿå¸‚-å»ºè®¾é¡¹ç›®çŽ¯è¯„z+http://www.yuanjiang.gov.cn/20839/index.htmú"http://www.yuanjiang.gov.cn/20839/Úgov_rawz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36>)   ÚpÚddÚdlÚdtÚh1Úh2Úh3Úh4Úh5Úh6ÚhrÚliÚolÚtdÚthÚtrÚulÚdivÚnavÚpreÚformÚmainÚasideÚtableÚtbodyÚtfootÚtheadÚcenterÚdialogÚfigureÚfooterÚheaderÚhgroupÚaddressÚarticleÚcaptionÚdetailsÚsectionÚfieldsetÚ
blockquoteÚ
figcaptionc                 óÒ   ‡‡‡— | €yddl }ddlmŠ g Šˆˆˆfd„Š ‰| «       dj                  ‰«      }|j	                  dd|«      }|j	                  dd	|«      }|j                  «       S )
ul   å�—çº§è¾¹ç•Œå‡ºæ�¢è¡Œã€�è¡Œå†…èŠ‚ç‚¹ç›´æŽ¥æ‹¼æŽ¥ã€�<br> å‡ºæ�¢è¡Œï¼ˆâ‰ˆ æµ�è§ˆå™¨çœ‹åˆ°çš„æ�¢è¡Œç»“æž„ï¼‰ã€‚NÚ r   )ÚNavigableStringc                 óF  •— | j                   D ]‘  }t        |‰«      r‰j                  t        |«      «       Œ*t	        |dd «      dk(  r‰j                  d«       ŒLt	        |dd «      t
        v r+‰j                  d«        ‰|«       ‰j                  d«       ŒŠ ‰|«       Œ“ y )NÚnameÚbrú
)ÚchildrenÚ
isinstanceÚappendÚstrÚgetattrÚ_BLOCK_TAGS)ÚnodeÚchr2   ÚoutÚwalks     €€€ú$/root/gov_crawler/crawl_yuanjiang.pyr@   zbody_text.<locals>.walk,   s„   ø€ Ø—-‘-ò 
	ˆBÜ˜"˜oÔ.Ø—
‘
œ3˜r›7Õ#Ü˜˜V TÓ*¨dÒ2Ø—
‘
˜4Õ Ü˜˜V TÓ*¬kÑ9Ø—
‘
˜4Ô Ù�R”Ø—
‘
˜4Õ á�R•ñ
	ó    z[ \t\r\f\v]*\n[ \t\r\f\v]*r6   ú\n{3,}ú

)ÚreÚbs4r2   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr2   r?   r@   s      @@@rA   Ú	body_textrM   $   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrB   c                 ó�   — | dk(  rt         }nt        › d| › d�}t        j                  |t        d¬«      }d|_        |j                  S )z;Get list page content for the given page number (0-indexed)r   Úindex_z.htmé   ©ÚheadersÚtimeoutÚgb2312)ÚLIST_URLÚBASE_URLÚrequestsÚgetÚHEADERSÚencodingÚtext)ÚpageÚurlÚrs      rA   Ú
fetch_pager_   ?   sB   € àˆq‚yÜ‰ä�
˜&   dÐ+ˆÜ�‰�S¤'°2Ô6€AØ€A„JØ�6‰6€MrB   c                 ó¤  — t        | d«      }g }|j                  dd¬«      }|s|}|j                  d«      D �]  }|j                  d«      }|r|j                  d«      sŒ)|d   }|j	                  d¬	«      }|rt        |«      d
k  rŒQd|vrŒV|j                  d«      s7|j                  d«      rd|z   }n |j                  d«      rd|› �}n	t        |z   }d}|j                  d«      }	|	r|	j	                  d¬	«      }t        j                  dd|«      }t        j                  dd|«      j                  «       }|j                  |||dœ«       �Œ |S )z.Extract article links and dates from list pageúhtml.parserr   Úlists©Úclass_r   ÚaÚhrefT)rI   é
   Úcontent_Úhttpú/zhttp://www.yuanjiang.gov.cnú.r   r1   Úspanz\s*\u00a0+\s*ú z\s{2,})Útitler]   Údate)r   ÚfindÚfind_allrX   Úget_textÚlenÚ
startswithrV   rE   rH   rI   r9   )
ÚhtmlÚsoupÚitemsÚ	lists_divr   Úa_tagrf   rn   Údate_strrl   s
             rA   Úextract_itemsr{   I   sV  € ä˜˜}Ó-€DØ€Eð —	‘	˜%¨�	Ó0€IÙØˆ	ð × Ñ  Ó&ó FˆØ—‘˜“ˆÙ˜EŸI™I fÔ-ØØ�V‰}ˆØ—‘ T�Ó*ˆÙœ˜E›
 RšØØ˜TÑ!Øð �‰˜vÔ&Ø�‰˜sÔ#Ø4°tÑ;‘Ø—‘ Ô%à;¸D¸6ÐB‘ä $‘�ð ˆØ�w‰w�v‹ˆÙØ—}‘}¨4�}Ó0ˆHô —‘Ð'¨¨eÓ4ˆÜ—‘�y # uÓ-×3Ñ3Ó5ˆà�‰˜u¨T¸8ÑDÖEð?FðB €LrB   c           	      ó  — d}d}d}t        j                  d| «      }|ret        |j                  d«      «      }t        |j                  d«      «      }t        |j                  d«      «      }t	        d|› d|› d|› d	�d
¬«       ||fS )z4Extract total count and max page from pagination divr   é   u   å…±(\d+)æ�¡.*?(\d+)/(\d+)é¡µé   é   z  Pagination: u   æ�¡, rj   u   é¡µT©Úflush)rE   ÚsearchÚintÚgroupÚprint)ru   ÚtotalÚmax_pageÚcurrentÚfenye_matchs        rA   Úparse_paginationrŠ   w   s�   € à€EØ€HØ€Gô —)‘)Ð;¸TÓB€KÙÜ�K×%Ñ% aÓ(Ó)ˆÜ�k×'Ñ'¨Ó*Ó+ˆÜ�{×(Ñ(¨Ó+Ó,ˆÜ�˜u˜g U¨7¨)°1°X°J¸cÐBÈ$ÕOà�(ˆ?ÐrB   c                 óR  — 	 t        j                  | t        d¬«      }d|_        t	        |j
                  d«      } |g d¢«      D ]  }|j                  «        Œ |j                  dd¬«      xs= |j                  dd	¬
«      xs( |j                  dd¬
«      xs |j                  dd¬«      }|rt        |«      }nt        |«      }t        j                  dd|«      }t        j                  dd|«      }|j                  «       S # t        $ r}t        d|› �d¬«       Y d}~yd}~ww xY w)zFetch detail page contentrP   rQ   rT   ra   )ÚscriptÚstyler   r%   r&   r   r   Úzoom)Úidzyea-conrc   zarticle-conÚcontentrC   rD   z {2,}rm   z  [ERROR] detail: Tr€   Nr1   )rW   rX   rY   rZ   r   r[   Ú	decomposerp   rM   rE   rH   rI   Ú	Exceptionr…   )r]   r^   rv   ÚtagÚcontent_divr�   Úes          rA   Úfetch_detailr–   ‡   s  € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ü˜QŸV™V ]Ó3ˆáÒOÓPò 	ˆCØ�M‰M�Oð	ð �I‰I�e ˆIÓ'ò .Ø�y‰y˜ yˆyÓ1ò.à�y‰y˜ }ˆyÓ5ò.ð �y‰y˜ 9ˆyÓ-ð	 	ñ Ü Ó,‰Gä “oˆGä—&‘&˜ F¨GÓ4ˆÜ—&‘&˜ 3¨Ó0ˆà�}‰}‹ÐøÜò ÜÐ" 1 #Ð&¨dÕ3Üûðús   ‚D D Ä	D&ÄD!Ä!D&c                  óH  — t        j                  t        «      } | j                  «       }t	        «       }|j                  dt        f«      D ]  }|j                  |d   «       Œ d}|j                  dt        f«      j                  «       }|r
|d   r|d   }| j                  «        t        d|› �d¬«       t        dt        |«      › �d¬«       t        d«      }t        |«      \  }}t        d	|› d
|› �d¬«       g }t        |«      D ]Q  }	|	dkD  rt        |	«      }t        |«      }
t        d|	dz   › d|› dt        |
«      › d�d¬«       |j!                  |
«       ŒS t        dt        |«      › �d¬«       d}d}d}t        j                  t        «      } | j                  «       }|D �]U  }|d   }|d   }|d   }||v r|dz  }Œt#        |«      }|rt        |«      dk  r(t        d|d d › dt        |«      › d�d¬«       |s|dz  }Œ`|sg	 t%        j&                  |t(        d¬«      }d|_        t-        j.                  d|j0                  «      }|r!|j3                  d«      j5                  dd«      }|s#t7        j8                  «       j;                  d«      }t-        j<                  dd |«      d d! }|j                  d"|||t        |f«       |dz  }|d#z  dk(  s�Œ2| j?                  «        t        d$|› d%|› d&�d¬«       �ŒX | j?                  «        | j                  «        t        d'd(› �d¬«       t        d)t        › �d¬«       t        dt        |«      › �d¬«       t        d*|› �d¬«       t        d+|› �d¬«       t        d,|› �d¬«       t        d(› d¬«       y #  Y �Œ1xY w)-Nz)SELECT url FROM gov_raw WHERE site_name=?r   z
1900-01-01z7SELECT MAX(publish_date) FROM gov_raw WHERE site_name=?zLatest DB date: Tr€   zExisting URLs: zTotal pages: z, Expected total: z  Page r}   rj   z: z itemszTotal list items: r]   rn   ro   éd   z
  [SHORT] rP   z... (ú)é   rQ   rT   z(\d{4}[-/]\d{1,2}[-/]\d{1,2})ú-z%Y-%m-%dz[^\d-]r1   rg   z…
            INSERT OR IGNORE INTO gov_raw (title, content, url, site_name, publish_date)
            VALUES (?, ?, ?, ?, ?)
        é   z  Progress: z new / z skipr6   z2==================================================zSite: zNew: zSkipped (existing): zErrors: ) Úsqlite3ÚconnectÚDB_PATHÚcursorÚsetÚexecuteÚ	SITE_NAMEÚaddÚfetchoneÚcloser…   rs   r_   rŠ   Úranger{   Úextendr–   rW   rX   rY   rZ   rE   r‚   r[   r„   Úreplacer   ÚnowÚstrftimerH   Úcommit)ÚconnÚcÚexistingÚrowÚlatest_db_dateru   Útotal_countr‡   Ú	all_itemsr\   rw   Ú	new_countÚ
skip_countÚerror_countÚitemr]   rn   rz   r�   Úr2Údate_ms                        rA   r   r   ¥   sš  € Ü�?‰?œ7Ó#€DØ�‰‹€Aô ‹u€HØ�y‰yÐDÄyÀlÓSò ˆØ�‰�S˜‘VÕðð "€NØ
�)‰)ÐMÔPYÈ|Ó
\×
eÑ
eÓ
g€CÙ
ˆs�1ŠvØ˜Q™ˆØ‡J�J„Lä	Ð˜^Ð,Ð
-°TÕ:Ü	ˆOœC ›M˜?Ð
+°4Õ8ô �a‹=€DÜ,¨TÓ2Ñ€K�Ü	ˆM˜(˜Ð#5°k°]Ð
CÈ4ÕPð €IÜ�h“ò  ˆØ�!Š8Ü˜dÓ#ˆDÜ˜dÓ#ˆÜ�˜˜Q™�x˜q  
¨"¬S°«Z¨L¸Ð?ÀtÕLØ×Ñ˜Õð ô 
Ðœs 9›~Ð.Ð
/°tÕ<ð €IØ€JØ€Kä�?‰?œ7Ó#€DØ�‰‹€Aàó 'RˆØ�5‰kˆØ�W‘ˆØ˜‘<ˆà�(‰?Ø˜!‰OˆJØä˜sÓ#ˆÙœ#˜g›,¨Ò,Ü�J˜u S b˜z˜l¨%´°G³¨~¸QÐ?ÀtÕLÙØ˜qÑ �ØáðÜ—\‘\ #¬wÀÔC�Ø&�”ÜŸ™Ð#CÀRÇWÁWÓM�ÙØ%Ÿ|™|¨A›×6Ñ6°s¸CÓ@�Hñ Ü—|‘|“~×.Ñ.¨zÓ:ˆHä—6‘6˜) R¨Ó2°3°BÐ7ˆà	�	‰	ð ð �W˜c¤9¨hÐ7ô	9ð 	�Q‰ˆ	à�r‰>˜QÔØ�K‰KŒMÜ�L  ¨7°:°,¸eÐDÈD×QðO'RðR 	‡K�K„MØ‡J�J„Lä	ˆBˆvˆhˆ-˜tÕ$Ü	ˆF”9�+Ð
 dÕ+Ü	Ðœs 9›~Ð.Ð
/°tÕ<Ü	ˆE�)�Ð
 TÕ*Ü	Ð   Ð
-°TÕ:Ü	ˆH�[�MÐ
"¨$Õ/Ü	ˆVˆH˜TÖ"øð7Úús   È
A&NÎN!Ú__main__)Ú__doc__rW   r�   rE   Úosr   rF   r   rŸ   r£   rU   rV   Ú
TABLE_NAMErY   r<   rM   r_   r{   rŠ   r–   r   Ú__name__© rB   rA   ú<module>rÀ      sƒ   ðñó Û Û 	Û 	Ý Ý à
'€Ø*€	Ø8€Ø/€Ø€
àð  Dð€ò*€òò6ò,ò\ò ò<\#ð| ˆzÒÙ…Fð rB   