
    <|j
                    H   d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
 ddlmZ  ej                  dej                        Z ej                  d      Z ej                  d	ej"                        Z ed
       G d d             Z	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZy)u/   论坛帖子页解析 - 复用自 pm001-crawler    )annotationsN)	dataclass)parse_qsunquoteurljoinurlparse)BeautifulSoupzdispuser\.asp\?u%   交易等级[:：]?\s*([^\n\r]{1,40})u<   ^(?:来自|所在地|地区|地址)[:：]?\s*([^\n\r]{1,60})T)slotsc                  J    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   y	)

ThreadPoststr
author_keyauthor_name
str | Noneprofile_urlleveladdresstextN)__name__
__module____qualname____annotations__     %/opt/daily-market/src/forum_thread.pyr   r      s$    O
Ir   r   c                   t        | d      }g }t               }|j                  dd       D ]  }|j                  dd      }	|j                  dd      }
|	|
/|	j                  dt        	      }d}d}d}|rad
j                  |j                        j                         }t        |j                  dd            }t        ||j                  dd            }nN|	j                  dd      D ]8  }|j                  d      }|st        |      dk  s'd|vs,d|vs1|}d| } n |s|}|s|}|s|}|	j                  dd      }|
j                  dd      }|s3|s7||dd f}||v rD|j                  |       |j                  t        |||t!        |      t#        |      xs t#        |      |              |r|S |j                  dd      }t        |||dd|      gS )uQ   解析帖子页中的回复内容，并提取作者、级别、地址和正文。lxmldivc                    | xr d| v S )Npostlaryr   )cs    r   <lambda>z$parse_thread_posts.<locals>.<lambda>(   s    A<Q*PQ/ r   )class_postuserinfopostNa)href r'    F)	recursiveT)strip   u   ：:name:
x   )r   r   r   r   r   r   )r	   setfind_allfindAUTHOR_LINK_PATTERNjoinstripped_stringsr+   extract_author_keygetr   get_textlenaddappendr   extract_levelextract_address)htmlbase_urldefault_author_keydefault_author_namedefault_profile_urlsouppostsseen_blocks
post_layeruserinfocontent_divauthor_anchorr   r   r   r   r   sidebar_textcontent_text	block_key	full_texts                        r   parse_thread_postsrO      s.    v&D E(+KmmE2QmR 4

??5?@ ooeFo;{2 c0CD
((=#A#ABHHJK+M,=,=fb,IJJ!(M,=,=fb,IJK((%(@ ||$|/CINuD/@SPT_"&K#(J -K+J-K((T(:"++D+=ds!34	#	"%''#L1'5V9V!		
W4
l d$/I)++	
	 	r   c                r    t         j                  |       }|r|j                  d      j                         S dS )u-   从作者信息文本中提取等级信息。   N)LEVEL_PATTERNsearchgroupr+   r   matchs     r   r=   r=   n   s0      &E%*5;;q>!44r   c                r    t         j                  |       }|r|j                  d      j                         S dS )u-   从作者信息文本中提取地址信息。rQ   N)ADDRESS_PATTERNrS   rT   r+   rU   s     r   r>   r>   t   s0    ""4(E%*5;;q>!44r   c                    t        t        |       j                        }d|v r|d   rd|d   d    S d|v r|d   rdt        |d   d          S y)u3   从作者主页链接中提取作者唯一标识。idzid:r   namer.   N)r   r   queryr   )r'   r\   s     r   r7   r7   z   se    Xd^))*Eu}tU4[^$%%5=wuV}Q/0122r   )r?   r   r@   r   rA   r   rB   r   rC   r   returnzlist[ThreadPost])r   r   r]   r   )r'   r   r]   r   )__doc__
__future__r   redataclassesr   urllib.parser   r   r   r   bs4r	   compile
IGNORECASEr4   rR   	MULTILINErX   r   rO   r=   r>   r7   r   r   r   <module>rg      s    5 " 	 ! = =  !bjj!3R]]C 

CD"**\^`^j^jk   O
OO O 	O
 $O Od55r   