Ë
    ¸¬ujp  ã                   óÌ   — d Z ddlZddlmZ ddlmZ ddlZddlmZ ddlZddl	Z	dZ
dZdZ e	j                  d	d
«      ZdZddiZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u§   å­Ÿæ´¥åŒºäººæ°‘æ”¿åºœ - è¡Œæ”¿è®¸å�¯è¡Œæ”¿å¤„ç½šå�Œå…¬ç¤º çˆ¬è™«
https://www.mengjin.gov.cn/zwgk/jgzn/ssthjjmjfj/xzxkxzcfsgs/
æ ¾å·�CMSï¼Œ10æ�¡/é¡µï¼Œæ€»681æ�¡(69é¡µ)
é    N)Údatetime)Úurljoin)ÚBeautifulSoupzhttps://www.mengjin.gov.cnz!/zwgk/jgzn/ssthjjmjfj/xzxkxzcfsgsu0   mengjin.gov.cn-è¡Œæ”¿è®¸å�¯è¡Œæ”¿å¤„ç½šå�Œå…¬ç¤ºÚ	SEARCH_DBz/root/search.dbÚeiaz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z
2023-06-16c                  ób   — t        j                  t        «      } t         j                  | _        | S )N)Úsqlite3ÚconnectÚDB_PATHÚRowÚrow_factory)Úconns    ú"/root/gov_crawler/crawl_mengjin.pyÚget_connr      s!   € Ü�?‰?œ7Ó#€DÜ—{‘{€DÔØ€Kó    c                 óR   — | syt        j                  dd| j                  «       «      S )NÚ z\s+ú )ÚreÚsubÚstrip)Útexts    r   Ú
clean_textr       s!   € ÙØÜ�6‰6�&˜#˜tŸz™z›|Ó,Ð,r   c                 ó`   — t        j                  d|› d�| «      }|r|j                  d«      S dS )zExtract meta tag valuez<meta[^>]*name=["\']z%["\'][^>]*content=["\']([^"\']+)["\']é   r   )r   ÚsearchÚgroup)ÚhtmlÚnameÚms      r   Úget_metar!   &   s3   € ä
�	‰	Ð)¨$¨Ð/TÐUÐW[Ó\€AÙˆ1�7‰7�1‹:Ð" Ð"r   c                 ó  — 	 t        j                  | t        d¬«      }|j                  «        d|_        |j                  }t        |d
«      }t        |d«      }|s7|j                  d«      }|r$|j                  d¬«      j                  d«      d   }|sy	t        |«      }t        |d«      }t        j                  d|«      }|r|j!                  d«      nd}	|	sy	t        |d«      }
|
s2t        j"                  d|«      }|rt        |j!                  d«      «      }
|j                  d«      }|rt%        |«      nd}d}|r!|j                  dd¬«      }t        |dd «      }||	|||
fS # t
        $ r}t        d| › d|› �d¬«       Y d}~y	d}~ww xY w)uC   èŽ·å�–è¯¦æƒ…é¡µ: è¿”å›ž (title, pub_date, content, summary, source)é   ©ÚheadersÚtimeoutúutf-8u     [WARN] èŽ·å�–è¯¦æƒ…é¡µå¤±è´¥ ú: T©ÚflushN)NNNNNzhtml.parserÚArticleTitleÚtitle)r   Ú_r   ÚPubDatez(\d{4}-\d{2}-\d{2})r   ÚContentSourceu   æ�¥æº�[ï¼š:]\s*([^<\n]{2,30})zdiv.content#contentr   r   )Ú	separatorr   éÈ   )ÚrequestsÚgetÚHEADERSÚraise_for_statusÚencodingÚ	ExceptionÚprintr   r   r!   Ú
select_oneÚget_textÚsplitr   r   Úmatchr   r   Ústr)ÚurlÚrespÚer   Úsoupr,   Útitle_elÚpub_date_rawr    Úpub_dateÚsourceÚsrc_mÚ
content_elÚcontentÚsummaryr   s                   r   Úextract_detailrJ   ,   s‘  € ð,Ü�|‰|˜C¬¸"Ô=ˆØ×ÑÔØˆŒð
 �9‰9€DÜ˜˜}Ó-€Dô �T˜>Ó*€EÙØ—?‘? 7Ó+ˆÙØ×%Ñ%¨DÐ%Ó1×7Ñ7¸Ó<¸QÑ?ˆEÙØ+ä�uÓ€Eô ˜D )Ó,€LÜ
�‰Ð'¨Ó6€AÙˆq�w‰w�qŒz D€HÙØ+ô �d˜OÓ,€FÙÜ—	‘	Ð:¸DÓAˆÙÜ §¡¨A£Ó/ˆFð —‘Ð!6Ó7€JÙ!+Œc�*Œo°€Gð €GÙØ×"Ñ"¨S¸Ð"Ó=ˆÜ˜T $ 3˜ZÓ(ˆà�(˜G W¨fÐ4Ð4øôU ò ,ÜÐ/°¨u°B°q°cÐ:À$ÕGÜ+ûð,ús   ‚3E& Å&	FÅ/FÆFc                 ó,  — 	 t        j                  | t        d¬«      }|j                  «        d|_        |j                  }t        j                  d
|«      }|rt        |j                  d«      «      nd}t        j                  d|«      }g }|D ]S  \  }}	}
|j                  d«      st        t        |«      }|j!                  t#        |	«      ||
j%                  «       dœ«       ŒU ||fS # t
        $ r!}t        d| › d|› �d¬«       g dfcY d	}~S d	}~ww xY w)u*   èŽ·å�–åˆ—è¡¨é¡µï¼Œè¿”å›žæ–‡ç« æ�¡ç›®åˆ—è¡¨r#   r$   r'   u      [ERROR] èŽ·å�–åˆ—è¡¨é¡µå¤±è´¥ r(   Tr)   r   Nzpagecount="(\d+)"r   zd<li class="cl">\s*<a href="([^"]+)"[^>]*>\s*([^<]+?)\s*</a>\s*<span\s+class="date">([^<]+)\s*</span>Úhttp)r,   r>   Údate)r2   r3   r4   r5   r6   r7   r8   r   r   r   Úintr   ÚfindallÚ
startswithr   ÚBASE_URLÚappendr   r   )Úpage_urlr?   r@   r   ÚpcÚtotal_recordsÚitemsÚresultsÚhrefr,   Údate_strs              r   Úfetch_list_pagerZ   _   s  € ðÜ�|‰|˜H¬g¸rÔBˆØ×ÑÔØˆŒð
 �9‰9€Dô 
�‰Ð'¨Ó	.€BÙ(*”C˜Ÿ™ ›Ô$°€Mô �J‰JØoØó€Eð
 €GØ!&ò Ñˆˆe�XØ�‰˜vÔ&Üœ8 TÓ*ˆDØ�‰Ü Ó&ØØ—N‘NÓ$ñ
õ 	ðð �MÐ!Ð!øô5 ò ÜÐ0°°
¸"¸Q¸CÐ@ÈÕMØ�1ˆu�ûðús   ‚3C) Ã)	DÃ2DÄDÄDc                  óÎ  — t        dt        › d�d¬«       t        dt        › �d¬«       t        «       } | j	                  «       }t        j                  t        d«      j                  «       }d}d}d}t        t        t        z   dz   «      \  }}d	}|r||z   d
z
  |z  nd
}	t        d|› d|› d|	› �d¬«       t        |«      }
t        d
|	«      D ]v  }|dk(  rt        t        z   dz   }nt        t        z   d|› d�z   }t        d|d
z   › d|	› d|› d�d¬«       t        |«      \  }}|st        dd¬«        n|
j                  |«       Œx t        dt        |
«      › d�d¬«       |
D �]  }|d   }|j!                  d|f«       |j#                  «       r|d
z  }Œ2t%        |«      \  }}}}}|st        d|d   d d › d�d¬«       |d
z  }Œbt        j                  |d«      j                  «       }||k  r|d
z  }Œ‘|s|d   }t'        |j)                  dd«      «      }	 t+        t        t        dz   «      }|j!                  d|||t        ||t,        ||f	«       | j/                  «        |d
z  }t        d|d d › d |› �d¬«       �Œ | j5                  «        t        d$|› d%|› d&|› d'�d¬«       y # t0        $ r6}t        d!|d d" › d#|› �d¬«       | j3                  «        |d
z  }Y d }~�Œ~d }~ww xY w)(Nz=== u    çˆ¬è™« ===Tr)   u   æ•°æ�®åº“: z%Y-%m-%dr   ú/é
   r   u   æ€»è®°å½•: u
   , æ¯�é¡µ: u   , æ€»é¡µæ•°: z/index_z.htmlu	   
--- ç¬¬ u    é¡µ: z ---u     æ— å†…å®¹ï¼Œå�œæ­¢åˆ†é¡µu   
å…±èŽ·å�– u    æ�¡åˆ—è¡¨æ�¡ç›®r>   z)SELECT id FROM gov_raw WHERE page_url = ?u     [SKIP] æ— æ—¥æœŸ: r,   é(   z...ú-r   zžINSERT OR IGNORE INTO gov_raw (page_url, title, content, site_name, publish_date, summary, category, date_rank, source_url) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)z  [OK] z... | u     [ERROR] å…¥åº“å¤±è´¥: r#   z... - u   
=== å®Œæˆ�: æ–°å¢ž u	   , è·³è¿‡ u	   , é”™è¯¯ z ===)r8   Ú	SITE_NAMEr   r   Úcursorr   ÚstrptimeÚCUTOFF_DATErM   rZ   rQ   Ú	LIST_BASEÚlistÚrangeÚextendÚlenÚexecuteÚfetchonerJ   rN   Úreplacer   ÚCATEGORYÚcommitr7   ÚrollbackÚclose)r   ÚcurÚ	cutoff_dtÚ	total_newÚ
total_skipÚtotal_errorÚfirst_articlesrU   Ú	page_sizeÚtotal_pagesÚall_articlesÚpagerS   Úarticlesr-   Úartr>   r,   rD   rH   rI   rE   Úpub_dtÚ	date_rankÚ
source_urlr@   s                             r   Úmainr   ‚   s1  € Ü	ˆD”�˜;Ð
'¨tÕ4Ü	ˆKœ�yÐ
!¨Õ.ä‹:€DØ
�+‰+‹-€Cä×!Ñ!¤+¨zÓ:×?Ñ?ÓA€Ià€IØ€JØ€Kô %4´H¼yÑ4HÈ3Ñ4NÓ$OÑ!€N�MØ€IÙBO�= 9Ñ,¨qÑ0°YÒ>ÐUV€KÜ	ˆK˜� j°°¸=ÈÈÐ
VÐ^bÕcô ˜Ó'€Lô �a˜Ó%ò &ˆØ�1Š9Ü¤)Ñ+¨cÑ1‰Hä¤)Ñ+°¸°v¸UÐ.CÑCˆHä�
˜4 ™6˜( ! K =°°x°jÀÐEÈTÕRÜ% hÓ/‰ˆ�!áÜÐ.°dÕ;Ùà×Ñ˜HÕ%ð&ô 
ˆLœ˜\Ó*Ð+Ð+;Ð
<ÀDÕIð ó &ˆØ�%‰jˆð 	�‰Ð?À#ÀÔHØ�<‰<Œ>Ø˜!‰OˆJØä4BÀ3Ó4GÑ1ˆˆx˜ '¨6áÜÐ(¨¨W©°c°rÐ):Ð(;¸3Ð?ÀtÕLØ˜1ÑˆKØä×"Ñ" 8¨ZÓ8×=Ñ=Ó?ˆØ�IÒØ˜!‰OˆJØáØ˜‘LˆEä˜×(Ñ(¨¨bÓ1Ó2ˆ	ð	Ü ¤¬9°s©?Ó;ˆJØ�K‰Kð qØ�e˜W¤i°¸7ÄHÈiÐYcÐdôð �K‰KŒMØ˜‰NˆIÜ�G˜E # 2˜J˜< v¨h¨ZÐ8À×EðE&ðP 	‡J�J„LÜ	Ð! ) ¨I°j°\ÀÈ;È-ÐW[Ð
\ÐdhÖiøô ò 	ÜÐ,¨U°3°B¨Z¨L¸¸q¸cÐBÈ$ÕOØ�M‰MŒOØ˜1ÑŽKûð	ús   ÈA%J%Ê%	K$Ê.+KËK$Ú__main__)Ú__doc__r   r   Úurllib.parser   r2   Úbs4r   r	   ÚosrQ   rd   r`   Úgetenvr   rl   r4   rc   r   r   r!   rJ   rZ   r   Ú__name__© r   r   ú<module>rˆ      s–   ðñó
 
Ý Ý  Û Ý Û Û 	à'€Ø/€	Ø>€	Ø
ˆ"�)‰)�KÐ!2Ó
3€Ø€àð  Dð€ð €òò-ò#ò05òf "òFRjðj ˆzÒÙ…Fð r   