Ë
    Äzjt  ã                   óô   — 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  ej                  ej                  j                  «       ddlmZ dZdZedz   ZdZd	Zd
eddœZd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uý  
èŒ‚å��å¸‚è‡ªç„¶èµ„æº�å±€ - æ–°é—»åŠ¨æ€�/æ‰¹å‰�å…¬ç¤ºï¼ˆpqgsï¼‰
http://zrzyj.maoming.gov.cn/xwdt/pqgs/

ç«™ç‚¹ç‰¹å¾�ï¼ˆ2026-08-11 æŽ¢æµ‹ï¼‰:
- æ”¿åºœé—¨æˆ·ç½‘ç«™ç¾¤æ¨¡æ�¿ï¼ˆnfw-cmsï¼‰ï¼Œåˆ—è¡¨ 6æ�¡/é¡µï¼Œindex_N.html åˆ†é¡µï¼Œå…± 200 é¡µï¼ˆP201 èµ· 404ï¼‰
- åˆ—è¡¨æ ‡é¢˜å®Œæ•´ï¼ˆa æ–‡æœ¬å�³å®Œæ•´æ ‡é¢˜ï¼Œæ— æˆªæ–­ï¼‰
- è¯¦æƒ…é¡µ: h1 æ ‡é¢˜ + meta ArticleTitle/PubDate + <article class="info"> æ­£æ–‡ï¼ˆ<p> æ®µè�½ï¼‰
- é™„ä»¶: <a class="nfw-cms-attachment" href="ç»�å¯¹URL">ï¼ˆattachment/0/x/x/ID.extï¼‰
- æ—¥æœŸèŒƒå›´ 2026-08-07 ~ 2024-05-21ï¼Œå…¨é‡�åœ¨ CUTOFF çª—å�£å†…ï¼ˆæ— æˆªæ–­ï¼‰

ç”¨æ³•:
  python3 crawl_maoming_pqgs.py --pages=5    # é¦–æ‰¹å‰�5é¡µ
  python3 crawl_maoming_pqgs.py --pages=200  # å…¨é‡�
  python3 crawl_maoming_pqgs.py --pages=1    # æµ‹è¯•
é    N)Úurljoin)Úpush_to_searchdbu%   èŒ‚å��å¸‚è‡ªç„¶èµ„æº�å±€-æ‰¹å‰�å…¬ç¤ºzhttp://zrzyj.maoming.gov.cnz/xwdt/pqgs/index.htmlz
2023-08-10u   è‡ªç„¶èµ„æº�zkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8)z
User-AgentÚRefererÚAcceptc                 óÆ   — t        j                  | xs d«      } t        j                  dd| «      } | j	                  dd«      j	                  dd«      } | j                  «       S )NÚ u   ^(?:&middot;|&nbsp;|\s|â€¢|Â·)+u   â€‹u   ï»¿)ÚhtmlÚunescapeÚreÚsubÚreplaceÚstrip)Úts    ú'/root/gov_crawler/crawl_maoming_pqgs.pyÚclean_titler   +   sP   € Ü�‰�a’g˜2Ó€AÜ
�‰Ð1°2°qÓ9€AØ	�	‰	�(˜BÓ×'Ñ'¨°"Ó5€AØ�7‰7‹9Ðó    c                 óL  — | dk(  rt         }nt        › d| › d�}t        j                  |t        dd¬«      }|j
                  dk7  rg S |j                  xs d|_        |j                  }g }t        j                  d	|t        j                  «      D ]R  }|j                  d«      |j                  d
«      }}t        |«      }|sŒ3t        ||«      }|j                  ||dœ«       ŒT t!        «       }	g }
|D ]/  }|d   |	vsŒ|	j#                  |d   «       |
j                  |«       Œ1 |
S )u   è¿”å›žåˆ—è¡¨ itemsé   z/xwdt/pqgs/index_z.htmlé   F©ÚheadersÚtimeoutÚverifyéÈ   úutf-8z5<a[^>]+href=\"([^\"]*post_\d+\.html)\"[^>]*>(.*?)</a>é   )ÚtitleÚurlr   )ÚLIST_URLÚBASE_URLÚrequestsÚgetÚHEADERSÚstatus_codeÚapparent_encodingÚencodingÚtextr   ÚfinditerÚSÚgroupr   r   ÚappendÚsetÚadd)Úpager   ÚrÚrawÚitemsÚmÚhrefr   Ú
detail_urlÚseenÚoutÚits               r   Úfetch_list_pager8   1   s  € àˆq‚yÜ‰ä�
Ð+¨D¨6°Ð7ˆÜ�‰�S¤'°2¸eÔD€AØ‡}�}˜ÒØˆ	Ø×$Ñ$Ò/¨€A„JØ
�&‰&€CØ€EÜ�[‰[Ø@ØŒR�T‰Tóò :ˆð —g‘g˜a“j !§'¡'¨!£*ˆeˆÜ˜EÓ"ˆÙØÜ˜S $Ó'ˆ
Ø�‰˜u¨ZÑ8Õ9ð:ô ‹5€DØ
€CØò ˆØˆe‰9˜DÒ Ø�H‰H�R˜‘YÔØ�J‰J�r�Nðð €Jr   c                 óô  — 	 t        j                  | t        dd¬«      }|j                  «        |j                  xs d|_        |j                  }|}t        j                  d|«      }|rt        |j                  d«      «      xs |}d}t        j                  d|«      }|r|j                  d«      }g }t        j                  d	|t        j                  «      D ]�  }	|	j                  d«      |	j                  d
«      }}
|
j                  d«      r|
nt        | |
«      }t        t        j                   dd|«      «      xs |j#                  d«      d   }|j%                  ||dœ«       Œ� d}t        j                  d|t        j                  «      }|r|j                  d«      }nAdD ]<  }t        j                  ||t        j                  «      }|sŒ+|j                  d«      } n |r¼t        j                   dd|t        j                  ¬«      }t        j                   dd|«      }t        j                   dd|«      }t        j                   dd|«      }t        j                   dd|«      }t        j                   dd|«      }|D ]  }|d   |vsŒ|d|d   › d|d   › d�z  }Œ n=d|› d �g}|D ]   }|j%                  d|d   › d|d   › d�«       Œ" dj'                  |«      }|||fS # t        $ r dg dfcY S w xY w)!u,   è¿”å›ž (content_html, attachments, pub_date)r   Fr   r   Nz+<meta name="ArticleTitle" content="([^"]+)"r   z2<meta name="PubDate" content="(\d{4}-\d{2}-\d{2})"zC<a[^>]*class="nfw-cms-attachment"[^>]*href="([^"]+)"[^>]*>(.*?)</a>r   Úhttpz<[^>]+>r   ú/éÿÿÿÿ)Únamer   z.<article[^>]*class="info"[^>]*>(.*?)</article>)z(class="nfw-cms-content"[^>]*>(.*?)</div>z#class="TRS_Editor"[^>]*>(.*?)</div>z:<p[^>]*>(?:(?!</p>).)*nfw-cms-attachment(?:(?!</p>).)*</p>)Úflagsz<span[^>]*>z</span>z<p[^>]*>ú<p>z	<br\s*/?>z
<p>\s*</p>r   z<p><a href="z">r=   z</a></p>ú</p>)r!   r"   r#   Úraise_for_statusr%   r&   r'   Ú	Exceptionr   Úsearchr   r*   r(   r)   Ú
startswithr   r   Úsplitr+   Újoin)r4   Ú
list_titler/   r0   r   ÚtmÚpub_dateÚdmÚattsÚamr3   r=   Úabs_urlÚbodyr2   ÚpatÚmmÚaÚpartss                      r   Úfetch_detailrS   O   sÔ  € ðÜ�L‰L˜¬W¸bÈÔOˆØ	×ÑÔØ×(Ñ(Ò3¨GˆŒ
Ø�f‰fˆð €EÜ	�‰ÐAÀ3Ó	G€BÙ	Ü˜BŸH™H Q›KÓ(Ò1¨Eˆà€HÜ	�‰ÐHÈ#Ó	N€BÙ	Ø—8‘8˜A“;ˆà€DÜ�k‰kÐ`ÐbeÔgi×gkÑgkÓlò 4ˆØ—X‘X˜a“[ "§(¡(¨1£+ˆdˆØŸ/™/¨&Ô1‘$´w¸zÈ4Ó7PˆÜœ2Ÿ6™6 *¨b°$Ó7Ó8ÒR¸G¿M¹MÈ#Ó<NÈrÑ<RˆØ�‰˜T¨'Ñ2Õ3ð	4ð €DÜ
�	‰	ÐCÀSÌ"Ï$É$ÓO€AÙØ�w‰w�q‹z‰ð iò 	ˆCÜ—‘˜3 ¤R§T¡TÓ*ˆBÚØ—x‘x “{�Ùð		ñ
 ä�v‰vØIØ�œBŸD™Dô"ˆô �v‰v�n b¨$Ó/ˆÜ�v‰v�j " dÓ+ˆÜ�v‰v�k 5¨$Ó/ˆÜ�v‰v�l B¨Ó-ˆÜ�v‰v�m R¨Ó.ˆàò 	GˆAØ�‰x˜tÒ#Ø˜, q¨¡x j°°1°V±9°+¸XÐFÑF‘ñ	Gð
 �u�g˜TÐ"Ð#ˆØò 	IˆAØ�L‰L˜<¨¨%© z°°A°f±I°;¸hÐGÕHð	Ià�w‰w�u‹~ˆØ��xÐÐøôi ò Ø�R˜ˆ~Òðús   ‚AK& Ë&K7Ë6K7c                  óÐ  — d } t         j                  dd  D ]M  }|j                  d«      rt        |j	                  d«      d   «      } Œ2|j                  «       sŒCt        |«      } ŒO g }t        «       }d}	 | r|| kD  rn‡t        |«      }|st        d|› d�«       njd}|D ]4  }|d   |v rŒ|j                  |d   «       |j                  |«       |dz  }Œ6 t        d|› dt        |«      › d	|› d
t        |«      › �«       |dz  }Œ�t        d| › dt        |«      › �«       g }t        |«      D ]’  \  }	}t        |d   |d   «      \  }
}}|
€	d|d   › d�}
|j                  t        |d   |xs d|
|d   |d   |rt        j                   |d¬«      nddœ«       |	dz   dz  dk(  sŒvt        d|	dz   › dt        |«      › �«       Œ” t        dt        |«      › �«       t#        |t$        «       y )Nr   z--pages=ú=z[Pz] empty/404, stopr   r   z] got z items, new z, total z[AutoPg] max_pages=z, collected r   r?   r@   r   F)Úensure_asciiz[])Ú	site_namer   rI   ÚcontentÚ
source_urlr   Úattachmentsé2   z	[Detail] r;   z[Detail] done )ÚsysÚargvrD   ÚintrE   Úisdigitr,   r8   Úprintr-   r+   ÚlenÚ	enumeraterS   Ú	SITE_NAMEÚjsonÚdumpsr   ÚCATEGORY)Ú	max_pagesrQ   Ú	all_itemsr5   r.   r1   Únewr7   ÚvalidÚirX   rK   rI   s                r   Úmainrl   Œ   s  € Ø€IÜ�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#Ü˜AŸG™G C›L¨™OÓ,‰IØ�Y‰Y�[Ü˜A›‰Ið	ð
 €IÜ‹5€DØ€DØ
Ù˜ 	Ò)ØÜ Ó%ˆÙÜ�B�t�fÐ-Ð.Ô/ØØˆØò 	ˆBØ�%‰y˜DÑ ØØ�H‰H�R˜‘YÔØ×Ñ˜RÔ Ø�1‰H‰Cð	ô 	��4�&˜œs 5›z˜l¨,°s°e¸8ÄCÈ	ÃNÐCSÐTÔUØ�‰	ˆð ô  
Ð 	˜{¨,´s¸9³~Ð6FÐ
GÔHà€EÜ˜9Ó%ò 6‰ˆˆ2Ü".¨r°%©y¸"¸W¹+Ó"FÑˆ��xØˆ?Ø˜B˜w™K˜=¨Ð-ˆGØ�‰Ü"Ø˜‘[Ø š BØØ˜U™)Ø�e‘9ÙCGœ4Ÿ:™: d¸Õ?ÈTñ
ô 	ð �‰E�R‰<˜1ÓÜ�I˜a ™c˜U !¤C¨	£NÐ#3Ð4Õ5ð6ô 
ˆNœ3˜u›:˜,Ð
'Ô(Ü�UœHÕ%r   Ú__main__)Ú__doc__r   r\   rd   r	   Úurllib3r!   Úurllib.parser   Údisable_warningsÚ
exceptionsÚInsecureRequestWarningÚcrawler_libr   rc   r    r   ÚCUTOFFrf   r#   r   r8   rS   rl   Ú__name__© r   r   ú<module>rx      sœ   ðñó  
Û 
Û Û Û Û Ý  à €× Ñ ˜×+Ñ+×BÑBÔ Cå (à3€	Ø(€ØÐ-Ñ-€Ø	€Ø€ð @ØØOñ€òòò<; òz-&ð^ ˆzÒÙ…Fð r   