
    j-                         d dl Z d dlZd dlZd dlmZmZ d dlmZmZ d dl	m
Z
 ddlmZmZ ddlmZ dd	lmZ d
dgZddgZ G d de      Zy)    N)parse_qsurlparse)AnyBinaryIO)BeautifulSoup   )DocumentConverterDocumentConverterResult)
StreamInfo   )_CustomMarkdownifyz	text/htmlzapplication/xhtmlz.htmlz.htmc                   @    e Zd ZdZdedededefdZdededede	fdZ
y)	BingSerpConverterzq
    Handle Bing results pages (only the organic search results).
    NOTE: It is better to use the Bing API
    file_streamstream_infokwargsreturnc                    |j                   xs d}|j                  xs dj                         }|j                  xs dj                         }t	        j
                  d|      sy|t        v ryt        D ]  }|j                  |      s y y)zH
        Make sure we're dealing with HTML content *from* Bing.
         z"^https://www\.bing\.com/search\?q=FT)	urlmimetypelower	extensionresearchACCEPTED_FILE_EXTENSIONSACCEPTED_MIME_TYPE_PREFIXES
startswith)selfr   r   r   r   r   r   prefixs           k/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/markitdown/converters/_bing_serp_converter.pyacceptszBingSerpConverter.accepts   s     oo#((.B557 **0b779	yy>D001 	F""6*	
     c                 V   |j                   J t        t        |j                         j                        }|j	                  ddg      d   }|j
                  dn|j
                  }t        |d|      }|j                  d      D ]1  }t        |d	      s|j                  s|xj                  d
z  c_	        3 |j                  d      D ]  }	|	j                           t        di |}
t               }|j                  d      D ]#  }t        |d      s|j                  dd      D ]p  }t        |d         }t        |j                        }d|v s+|d   d   dd  j                         dz   }	 t        j                  |d      j!                  d      |d<   r |
j)                  |      j                         }t+        j,                  d|      D cg c]  }|j                          }}|j/                  dj1                  |D cg c]  }t3        |      dkD  s| c}             & d| ddj1                  |      z   }t5        ||j6                  d       S |j6                  j                        S # t"        $ r Y [t$        j&                  $ r Y pw xY wc c}w c c}w )Nqr   r   zutf-8zhtml.parser)from_encodingtptt)class_string algoSlug_iconb_algofind_allaT)hrefr/   ur   z==z-_)altcharsz\n+
z## A Bing search for 'z ' found the following results:

z

)markdowntitle )r   r   r   querygetcharsetr   r-   hasattrr)   extractr   liststripbase64	b64decodedecodeUnicodeDecodeErrorbinasciiErrorconvert_soupr   splitappendjoinlenr
   r4   )r   r   r   r   parsed_paramsr6   encodingsoupr'   slug_markdownifyresultsresultr.   parsed_hrefqsr0   	md_resultlinelineswebpage_texts                        r!   convertzBingSerpConverter.convert9   s    *** !+//!:!@!@A!!#t,Q/ *1197{?R?R[-xP MMM0 	#DtX&4;;s"	# MMM9 	DLLN	 *3F3&mm8m4 	QF6:. __St_4 &qy1k//0 "93
12,,.5 $*$4$4Q$F$M$Mg$V&	( %11&9??AI.0hhvy.IJdTZZ\JEJNN499u%NtD	Ad%NOP7	Q< %UG+MNkk'"# 	
 '!**,$
 	
26**2C2C
 	
 . #>> 
 K%Ns*   5)I<J!
J&J&<	JJJN)__name__
__module____qualname____doc__r   r   r   boolr"   r
   rU   r5   r#   r!   r   r      s]    
   	
 
8?
?
  ?
 	?

 
!?
r#   r   )r   r=   rA   urllib.parser   r   typingr   r   bs4r   _base_converterr	   r
   _stream_infor   rL   r   r   r   r   r5   r#   r!   <module>r`      sO    	   +    H % ,   
 a
) a
r#   