medrxiv_web_search.cpython-310.pyc•4.54 kB
o
�u�g� � @ s� d dl Z d dlmZ d dlmZ ddd�Zd d
� Zddd�Zdd
d�Zdd� Z e
dkrkdZeedd�Ze
e� dZdZdZdZdZdZdZdZdZdZe eeeeeeeeee�
Ze
e� dZee�Ze
e� dS dS )� N)�
BeautifulSoup)�quote�medrxiv�
�relevance-rankc C s d}g }
| r|
� t| �� � |r|
� dt|�� d�� |r'|
� dt|�� �� |r3|
� dt|�� �� |r@|
� dt|�� d�� |rM|
� dt|�� d �� |rY|
� d
t|�� �� |re|
� dt|�� �� |rt| rt|
� d|� d
| � �� |
� d|
� �� |
� dt|�� d�� |d�|
� S )u4 根据用户输入的字段生成 medRxiv 搜索 URLzhttps://www.medrxiv.org/search/ztitle%3Az title_flags%3Amatch-allz
author1%3Az
author2%3Azabstract_title%3Az! abstract_title_flags%3Amatch-allztext_abstract_title%3Az& text_abstract_title_flags%3Amatch-allzjcode%3Aztoc_section%3Az
limit_from%3Az limit_to%3Az
numresults%3Azsort%3Az format_result%3Astandardz%20N)�appendr �join)�term�title�author1�author2�abstract_title�text_abstract_titleZjournal_code�section�
start_date�end_date�num_results�sort�base_urlZquery_parts� r �A/home/zjlab/code/mcp_hub/medRxiv-MCP-Server/medrxiv_web_search.py�generate_medrxiv_search_url s. r c C sR ddi}t j| |d�}|jdkr�t|jd�}|jddd�}g }|D ]z}|jd d
d�}|r1|j�� nd}|jd dd�} | rA| j�� nd
}
|jddd�}|rQ|j�� nd}|jddd�}
|
rbd|
d nd}|jd dd�}|rx|j�� �dd��� nd}i }||
||d�}|dkr�t |�dd��}|r�|�
|� |�|� q!|S td|j� d�� dS )u= 从 medRxiv 搜索结果页面解析文章信息,包括 DOI�
User-Agent�oMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36��headers�� zhtml.parserZliz
search-result)�class_�spanzhighwire-cite-title�No titlezhighwire-citation-authors�
No authors�divzhighwire-cite-snippet�No abstract�azhighwire-cite-linked-titlezhttps://www.medrxiv.orgZhrefzNo linkzhighwire-cite-metadata-doizdoi:� �No DOI)�Title�AuthorsZDOI_linkZLinkzhttps://doi.org/z*Error: Unable to fetch data (status code: �)N)
�requests�get�status_coder �textZfind_all�find�strip�replace�doi_get_medrxiv_metadata�updater �print)�
search_urlr �responseZsoup�articles�results�articleZ title_tagr
Zauthors_tag�authorsZabstract_tag�abstractZlink_tag�linkZdoi_tagZdoi_link�metadata�resultr r r �scrape_medrxiv_results$ s@ �
�
r= c
C s� d|� d| � d�}ddi}t j||d�}|jdkrk|�� }d|v rdt|d �d krd|d d }|�d
d�|�dd
�|�dd�|�dd�|�dd�|�dd�|�dd�|�dd�|�dd�|�dd�d�
S td| � d S td!|j� d"�� d S )#u<