Ë
    Æq«jå(  ã                   ó:  — 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mZ ddlm	Z	 dZ
dZdZdZd	Zd
Z ej                   dej"                  «      Zde› d�dœZ ej(                  «       Zej,                  j/                  e«       d„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uQ  ç§¦çš‡å²›å¸‚æ”¿åºœä¿¡æ�¯å…¬å¼€å¹³å�° â€” å…¬å‘Šå…¬ç¤º (qhd.gov.cn, code=293)
URL: http://www.qhd.gov.cn/list.jsp?pages=1&deptid=null&code=293
CMS: è‡ªå®šä¹‰JSP (qhd.gov.cn:81)
åˆ—è¡¨: ul.info-list-xxgk.mt15 > li > a + span.time
  åˆ†é¡µ: list.jsp?pages=N&deptid=null&code=293, 20æ�¡/é¡µ, 354é¡µ~7000æ�¡
  æ³¨æ„�: æœ€æ–°1-11æ�¡(çº¦2å‘¨å†…)è¯¦æƒ…å¸¸404(æº�ç«™å�‘å¸ƒå»¶è¿Ÿ), è·³è¿‡ä¸�å†™å� ä½�ç¬¦
è¯¦æƒ…: /article/293/{id}.html
  æ ‡é¢˜: meta ArticleTitle / div.top-info h1
  æ—¥æœŸ: meta PubDate / p.info
  æ�¥æº�: meta ContentSource
  æ­£æ–‡: div.detail-2#content (ç›´æŽ¥å­�èŠ‚ç‚¹ p/div/table)
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbzhttp://www.qhd.gov.cn:81u   ç§¦çš‡å²›å¸‚-å…¬å‘Šå…¬ç¤ºu   æ²³åŒ—zcrawl_qhd_gggs.pyib  z1\.(pdf|doc|docx|xls|xlsx|rar|zip|txt|wps|et|ofd)$z[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36z&/list.jsp?pages=1&deptid=null&code=293)z
User-AgentÚRefererc                 óv  ‡— | s| S | D �cg c]  }t        |t        «      sŒ|‘Œ }}t        |«      t        | «      k7  r| S t        «       g }}| D ])  }||vsŒ|j	                  |«       |j                  |«       Œ+ |D �‡cg c]&  Št        ‰«      dk\  rt        ˆfd„|D «       «      s‰‘Œ( }}|r|S |S c c}w c c}w )us  å‰”é™¤ã€Œå®¹å™¨æ®µã€�ï¼šåŽŸ find_all(['p','div']) å�Œæ—¶æ”¶ä¸‹å®¹å™¨ <div> å’Œå®ƒå†…éƒ¨çš„ <p>ï¼Œ
    å¯¼è‡´å�Œä¸€å†…å®¹å‡ºçŽ°ä¸¤æ¬¡ï¼ˆå®¹å™¨é‚£ä»½å¾€å¾€è¿˜è¢« get_text(strip=True) æ‹�å¹³ï¼‰ã€‚
    åˆ¤æ�®ï¼šæŸ�æ®µæ–‡æœ¬è¢«åˆ—è¡¨å†…å�¦ä¸€æ®µå®Œå…¨åŒ…å�« â†’ å®ƒæ˜¯å®¹å™¨æ®µ â†’ å‰”é™¤ã€‚
    ä¿�æŠ¤ï¼šè‹¥å‰”é™¤å�Žä¸ºç©ºï¼Œåˆ™åŽŸæ ·è¿”å›žï¼ˆä¸�å†’åˆ ç©ºçš„é£Žé™©ï¼‰ã€‚
    é(   c              3   ó:   •K  — | ]  }|‰uxr |xr |‰v –— Œ y ­w)N© )Ú.0ÚbÚas     €ú#/root/gov_crawler/crawl_qhd_gggs.pyú	<genexpr>z(_drop_container_parts.<locals>.<genexpr>6   s&   øè ø€ Ò(SÈ¨°!¨Ò)D¸Ò)D¸aÀ1¸fÓ)DÑ(Sùs   ƒ)Ú
isinstanceÚstrÚlenÚsetÚaddÚappendÚany)ÚpartsÚpÚpsÚseenÚuniqr   Úkeeps        ` r   Ú_drop_container_partsr   #   sÇ   ø€ ñ ØˆØÖ	1�œj¨¬CÕ0Š!Ð	1€BÐ	1Ü
ˆ2ƒw”#�e“*ÒØˆô “˜ˆ$€DØò (ˆØ�DŠ=Ø�H‰H�QŒK˜Ÿ™ Q�ð(ð ÷ V�!Ü˜“F˜b’L¤SÓ(SÈdÔ(SÔ%Sò ð V€Dð Váˆ4Ð!˜TÐ!ùò 
2ùòVs   ŠB1 B1Á>+B6c                 ó<   — t        | t        j                  d¬«       y )NT)ÚfileÚflush)ÚprintÚsysÚstderr)Úmsgs    r   Úlogr$   :   s   € Ü	ˆ#”C—J‘J dÖ+ó    c           
      ó,  — t         › d| › d�}d}t        d«      D ]s  }	 t        j                  |d¬«      }d|_        |j
                  }t        |«      dkD  r n8t        d	| › d
t        |«      › d|dz   › d�«       t        j                  d«       Œu |rt        |«      dk  rt        d	| › d�«       g S t        |d«      }g }|j                  dd¬«      }|sg S |j                  d«      D ]ü  }	|	j                  dd¬«      }
|
sŒ|
d   j                  «       }|rt        j                   d|«      sŒE|j#                  d«      st%        t         |«      }|
j                  dd«      j                  «       xs |
j'                  d¬«      }d}|	j                  dd ¬«      }|r7t        j                   d!|j'                  «       «      }|r|j)                  d«      }|j+                  |||d"œ«       Œþ |S # t        $ r"}t        d	| › d|dz   › d|› �«       Y d }~�Œ•d }~ww xY w)#Nz/list.jsp?pages=z&deptid=null&code=293Ú é   é   ©Útimeoutúutf-8i¸  u     [WARN] ç¬¬u   é¡µå“�åº”è¿‡å°�(u   ), ç¬¬é   u	   æ¬¡é‡�è¯•u   é¡µè¯·æ±‚å¤±è´¥(z): iè  u   é¡µæœ€ç»ˆå¤±è´¥, è·³è¿‡úhtml.parserÚulzinfo-list-xxgk)Úclass_Úlir   T©Úhrefr3   z/article/\d+/\d+\.html$ÚhttpÚtitle©ÚstripÚspanÚtimeú(20\d{2}-\d{2}-\d{2}))r5   ÚurlÚdate)ÚBASEÚrangeÚSESSIONÚgetÚencodingÚtextr   r$   Ú	Exceptionr9   Úsleepr   ÚfindÚfind_allr7   ÚreÚsearchÚ
startswithr   Úget_textÚgroupr   )Úpgr;   ÚhtmlÚattemptÚrÚeÚsoupÚitemsr/   r1   r   r3   r5   r<   r8   Údms                   r   Ú
crawl_listrT   >   s  € ÜˆFÐ" 2 $Ð&;Ð
<€CØ€DÜ˜“8ò 
ˆð	FÜ—‘˜C¨�Ó,ˆAØ ˆAŒJØ—6‘6ˆDÜ�4‹y˜4ÒÙÜ�,˜r˜dÐ"2´3°t³9°+¸VÀGÈAÁIÀ;ÈiÐXÔYô 	�
‰
�1�ð
ñ ”3�t“9˜tÒ#Üˆl˜2˜$Ð5Ð6Ô7Øˆ	Ü˜˜}Ó-€DØ€EØ	�‰�4Ð 0ˆÓ	1€BÙØˆ	Ø�k‰k˜$Óò BˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰y�‰Ó ˆÙœ2Ÿ9™9Ð%?ÀÔFØØ�‰˜vÔ&Üœ4 Ó&ˆDØ—‘�g˜rÓ"×(Ñ(Ó*ÒD¨a¯j©j¸t¨jÓ.DˆØˆØ�w‰w�v fˆwÓ-ˆÙÜ—‘Ð3°T·]±]³_ÓEˆBÙØ—x‘x “{�Ø�‰˜u¨T¸4Ñ@ÕAð!Bð" €Løô9 ò 	FÜ�,˜r˜dÐ"2°7¸1±9°+¸SÀÀÐD×EÒEûð	Fús   ž8G(Á!G(Ç(	HÇ1HÈHc                 ó	  ‡— d}t        d«      D ]r  }	 t        j                  | d¬«      }|j                  dk(  rt	        d| › �«        yd|_        |j                  }t        |«      d	kD  r n	 t        j                  d«       Œt |syt        |d«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|s%|j                  d«      }|r|j                  d¬«      }d}	|j                  dddi¬«      }
|
r=|
j                  d«      r,t!        j"                  d|
d   «      }|r|j%                  d«      }	d}|j                  ddd¬«      }|s|j                  dd¬«      }|�rã|j'                  ddg«      D ]  }|j)                  «        Œ g }t+        «       Š|j'                  d d¬!«      D ]Œ  }|d"   j                  «       }t,        j#                  |«      sŒ,|j/                  d#«      st1        t2        |«      }|j                  d¬«      xs d$}|‰vsŒh‰j5                  |«       |j7                  ||d%œ«       ŒŽ g }|j'                  g d&¢d¬'«      D �]  }|j8                  d(k7  r|j;                  d(«      rŒ%|j8                  d)k(  r)t=        ˆfd*„|j'                  d gd¬!«      D «       «      }|rŒ]t?        |«      j                  «       }|sŒy|j8                  d)k(  r@|j                  d(«      rŒš|j                  d)d+¬'«      }|rt?        |«      j                  «       }|j8                  dk(  r%|j;                  d«      r|j                  d)d(g«      sŒü|j8                  d,v s�Œ|j7                  |«       �Œ tA        |«      }d-jC                  |«      j                  «       }g }|jE                  d-«      D ]Q  }|j                  «       }|sŒt!        jF                  d.d|«      j                  «       sŒ<||vsŒA|j7                  |«       ŒS d-jC                  |«      j                  «       }|r$d/jC                  d0„ |D «       «      }|r|d-z   |z   n|}||	|fS # t        $ r}t	        d
| › d|› �«       Y d}~�Œd}~ww xY w)1u;   è¿”å›ž (title, date, content); 404è¿”å›ž (None, None, None)r'   é   é   r*   i”  u     [WARN] è¯¦æƒ…404: )NNNr,   iÜ  u     [WARN] è¯¦æƒ…å¤±è´¥ z: Ng      ø?r.   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentzdiv.top-info h1Tr6   ÚPubDater:   r-   Údivzdetail-2)r0   Úid)r_   ÚscriptÚstyler   r2   r3   r4   u   é™„ä»¶)rY   r;   )r   r^   Útable)Ú	recursiverb   r   c              3   ób   •K  — | ]&  }|j                  d d«      j                  «       ‰v –— Œ( y­w)r3   r'   N)r@   r7   )r
   r   Úseen_atts     €r   r   z!extract_detail.<locals>.<genexpr>¥   s2   øè ø€ ò >àð —E‘E˜& "Ó%×+Ñ+Ó-°Ô9ñ>ùs   ƒ,/F)r   rb   z

ú<[^>]+>ú
c              3   ó:   K  — | ]  }d |d   › d|d   › d�–— Œ y­w)z<p><a href="r;   z">rY   z</a></p>Nr	   )r
   Úatts     r   r   z!extract_detail.<locals>.<genexpr>Ä   s(   è ø€ Ò!lÐY\ L°°U±°¸B¸sÀ6¹{¸mÈ8Ô"TÑ!lùs   ‚)$r>   r?   r@   Ústatus_coder$   rA   rB   r   rC   r9   rD   r   rE   r7   Ú
select_onerJ   rG   rH   rK   rF   Ú	decomposer   Ú	ATTACH_RErI   r   r=   r   r   rY   Úfind_parentr   r   r   ÚjoinÚsplitÚsub)r;   rM   rN   rO   rP   rQ   r5   ÚmtÚh1r<   ÚmdÚmr\   ÚdcÚsÚattachmentsr   r3   rY   r   ÚnodeÚhas_attÚhtml_strÚinner_pÚ
uniq_partsÚpartÚpart_strippedÚ	att_linksre   s                               @r   Úextract_detailr�   h   sS  ø€ à€DÜ˜“8ò ˆð
	5Ü—‘˜C¨�Ó,ˆAØ�}‰} Ò#ÜÐ*¨3¨%Ð0Ô1Ù'Ø ˆAŒJØ—6‘6ˆDÜ�4‹y˜4ÒÙð  ô 	�
‰
�3�ðñ ØÜ˜˜}Ó-€Dà€EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙØ�_‰_Ð.Ó/ˆÙØ—K‘K d�KÓ+ˆEà€DØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔÜ�I‰IÐ.°°9±Ó>ˆÙØ—7‘7˜1“:ˆDà€GØ	�‰�5 °	ˆÓ	:€BÙØ�Y‰Y�u ˆYÓ+ˆÚ	Ø—‘˜h¨Ð0Ó1ò 	ˆAØ�K‰K�Mð	ð ˆÜ“5ˆØ—‘˜S t�Ó,ò 	DˆAØ�V‘9—?‘?Ó$ˆDÜ×Ñ Õ%Ø—‘ vÔ.Ü"¤4¨Ó.�DØ—z‘z¨�zÓ-Ò9°�Ø˜xÒ'Ø—L‘L Ô&Ø×&Ñ&°¸TÑ'BÕCð	Dð ˆØ—K‘KÒ 5À�KÓFó 	'ˆDØ�y‰y˜GÒ#¨×(8Ñ(8¸Ô(AØØ�y‰y˜CÒÜó >à!Ÿ]™]¨C¨5°t˜]Ó<ô>ó >�ñ ØÜ˜4“y—‘Ó(ˆHÙØØ�y‰y˜CÒØ—9‘9˜WÔ%ØØŸ)™) C°5˜)Ó9�ÙÜ" 7›|×1Ñ1Ó3�HØ�y‰y˜EÒ! d×&6Ñ&6°uÔ&=ÀdÇiÁiÐQTÐV]ÐP^ÔF_ØØ�y‰y˜NÓ*Ø—‘˜XÖ&ð+	'ô, & eÓ,ˆØ—+‘+˜eÓ$×*Ñ*Ó,ˆØˆ
Ø—M‘M &Ó)ò 	1ˆDØ ŸJ™J›LˆMÙ ØÜ—6‘6˜* b¨-Ó8×>Ñ>Ô@ØØ JÒ.Ø×!Ñ! -Õ0ð	1ð —+‘+˜jÓ)×/Ñ/Ó1ˆÙØŸ	™	Ñ!lÐ`kÔ!lÓlˆIÙ6=�g Ñ&¨Ò2À9ˆGØ�$˜ÐÐøôc ò 	5ÜÐ(¨¨¨R°¨sÐ3×4Ò4ûð	5ús   “4Q#Á	!Q#Ñ#	RÑ,RÒRc                  ó<  — dd l } | j                  «       }|j                  dt        d¬«       |j	                  «       }t        dt        |j                  t        «      «      }t        j                  t        d¬«      }|j                  d«       |j                  «       }|j                  d«       |j                  d	«       dx}x}}t        «       }	t        d|dz   «      D �]   }
t!        d
|
› d�«       t#        |
«      }|st!        d|
› d�«       Œ0t!        dt%        |«      › d�«       |D �]³  }|d   |	v rŒ|	j'                  |d   «       |j                  d|d   f«       |j)                  «       r|dz  }ŒLt!        d|d   › d|d   d d › �«       t+        |d   «      \  }}}|s|d   }|s|d   }|r1t%        t-        j.                  dd|«      j1                  «       «      dk  r"t!        d|rt%        |«      nd› d�«       |dz  }ŒÛt-        j.                  dd|«      d d }t-        j.                  dd|«      j1                  «       }t-        j2                  d|«      rdnd}	 |j                  d ||||d   |d   |t4        t6        t8        |df«      }|j:                  }|j                  d!||t4        |f«       |j=                  «        |dz  }tA        jB                  d"«       �Œ¶ �Œ tE        d#|› d$|› d%|› d&||z   |z   › �«       y # t        j>                  $ r |dz  }Y ŒSw xY w)'Nr   z--pagesr-   )ÚtypeÚdefaulté<   r*   zPRAGMA busy_timeout=10000a¬  CREATE TABLE IF NOT EXISTS gov_raw (id INTEGER PRIMARY KEY, site_name TEXT, source_url TEXT, page_url TEXT, title TEXT, publish_date TEXT, date_rank INTEGER DEFAULT 0, summary TEXT, status TEXT, category TEXT DEFAULT '', visits INTEGER DEFAULT 0, content TEXT DEFAULT '', tags TEXT DEFAULT '', industry TEXT DEFAULT 'other', attachments TEXT DEFAULT '', group_name TEXT, has_table INTEGER DEFAULT 0, script_name TEXT DEFAULT '')zgCREATE VIRTUAL TABLE IF NOT EXISTS gov_search USING fts5(title, site_name, summary, tokenize='trigram')u   --- ç¬¬u   é¡µ ---u   ç¬¬u)   é¡µå¤±è´¥/ä¸ºç©º, è·³è¿‡(ç»§ç»­ä¸‹ä¸€é¡µ)u   æ‰¾åˆ°u   æ�¡r;   z'SELECT id FROM gov_raw WHERE page_url=?z  [r<   z] r5   é-   rf   r'   é
   u       æ­£æ–‡è¿‡çŸ­/404(u	   ), è·³è¿‡éÈ   z\s+ú z<tablezªINSERT INTO gov_raw (title, summary, content, page_url, source_url, publish_date, site_name, script_name, group_name, has_table, date_rank) VALUES (?,?,?,?,?,?,?,?,?,?,?)zJINSERT INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)g      à?u	   
æ–°å¢ž: u
     é‡�å¤�: u     è¿‡çŸ­/404: u
     æ€»è®¡: )#ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚmaxÚminÚpagesÚ	MAX_PAGESÚsqlite3ÚconnectÚDBÚexecuteÚcursorr   r>   r$   rT   r   r   Úfetchoner�   rG   rq   r7   rH   ÚSITEÚSCRIPTÚGROUPÚ	lastrowidÚcommitÚIntegrityErrorr9   rD   r    )rŠ   ÚapÚargsr‘   ÚconnÚcÚ	total_newÚ	total_dupÚ
total_skipr   rL   rR   Úitemr5   r<   r\   ÚsummaryÚ	has_tableÚcurÚrids                       r   Úmainr«   É   s  € ÛØ	×	 Ñ	 Ó	"€BØ‡O�O�I¤C°€OÔ3Ø�=‰=‹?€DÜ�”3�t—z‘z¤9Ó-Ó.€Eä�?‰?œ2 rÔ*€DØ‡L�LÐ,Ô-Ø�‰‹€AØ‡I�Ið  }ô  ~Ø‡I�IÐwÔxà)*Ð*€IÐ*�	˜JÜ‹5€DÜ�A�u˜q‘yÓ!ó 'ˆÜˆg�b�T˜Ð!Ô"Ü˜2“ˆÙÜ�#�b�TÐBÐCÔDØÜˆf”S˜“Z�L Ð$Ô%Øó  	ˆDØ�E‰{˜dÑ"ØØ�H‰H�T˜%‘[Ô!Ø�I‰IÐ?À$ÀuÁ+ÀÔPØ�z‰zŒ|Ø˜Q‘�	ØÜ�#�d˜6‘l�^ 2 d¨7¡m°C°RÐ&8Ð%9Ð:Ô;Ü#1°$°u±+Ó#>Ñ ˆE�4˜ÙØ˜W™�ÙØ˜F‘|�Ùœc¤"§&¡&¨°R¸Ó"A×"GÑ"GÓ"IÓJÈRÒOÜÐ+¹G¬C°¬LÈÐ+KÈ9ÐUÔVØ˜a‘�
ØÜ—f‘f˜Z¨¨WÓ5°d°sÐ;ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGÜŸY™Y y°'Ô:™ÀˆIð
Ø—i‘ið AØ˜G W¨d°5©k¸4À¹;ÈÌdÔTZÔ\aÐclÐnoÐpór�ð —m‘m�Ø—	‘	ÐfØ ¤t¨WÐ5ô7à—‘”Ø˜Q‘�	ô �J‰J�sŽOòA 	ð'ôP 
ˆJ�y�k ¨I¨;°nÀZÀLÐPZÐ[dÐenÑ[nÐoyÑ[yÐZzÐ
{Õ|øô ×)Ñ)ò Ø˜Q‘’	ðús   ÉA*L Ì LÌLÚ__main__)Ú__doc__Úrequestsr“   rG   r!   r9   Úbs4r   Úurllib.parser   r•   r=   r™   r›   rš   r’   ÚcompileÚIrm   ÚHEADERSÚSessionr?   ÚheadersÚupdater   r$   rT   r�   r«   Ú__name__r	   r%   r   ú<module>r¸      s»   ðñ÷ (× 'Ó 'Ý Ý  à€Ø!€Ø"€Ø€Ø	€Ø€	ØˆB�J‰JÐKÈRÏTÉTÓR€	àoØ�Ð=Ð>ñ€ð
 ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ ò"ò.,ò'òT^ òB7}ðt ˆzÒÙ…Fð r%   