@@ -87,6 +87,41 @@ def search_startpage(query, num_results=20):
8787 return results [:num_results ]
8888
8989
90+ def search_bing (query , num_results = 20 ):
91+ """Using Bing's search which is a good alternative"""
92+ # Use international URL and parameters to bypass country redirection
93+ url = f"https://www.bing.com/search?q={ query } &setmkt=en-US&setlang=en-US&cc=US"
94+
95+ try :
96+ # Use a session to maintain cookies
97+ session = requests .Session ()
98+ # Set cookies to force US market and English language
99+ session .cookies .set ("SRCHHPGUSR" , "SRCHLANG=EN&WLS=2" , domain = ".bing.com" )
100+ session .cookies .set ("_EDGE_S" , "mkt=en-us" , domain = ".bing.com" )
101+
102+ res = session .get (url , headers = HEADERS , proxies = PROXY , timeout = 10 )
103+ res .raise_for_status ()
104+ except Exception as e :
105+ print (f"[web search] Error searching Bing: { e } " )
106+ return []
107+
108+ soup = BeautifulSoup (res .text , "html.parser" )
109+ results = []
110+
111+ for item in soup .select ("li.b_algo" ):
112+ title_link = item .select_one ("h2 a" )
113+ if not title_link :
114+ continue
115+
116+ href = title_link ["href" ]
117+ if href .startswith ("//" ):
118+ href = "https:" + href
119+
120+ results .append ({"title" : title_link .text .strip (), "url" : href })
121+
122+ return results [:num_results ]
123+
124+
90125def extract_text_from_url (url ):
91126 try :
92127 session = requests .Session ()
@@ -173,6 +208,8 @@ def web_search(query, num_results=5, provider="duckduckgo"):
173208
174209 if provider == "startpage" :
175210 search_results = search_startpage (query , num_results = num_results )
211+ elif provider == "bing" :
212+ search_results = search_bing (query , num_results = num_results )
176213 else :
177214 search_results = search_ddg (query , num_results = num_results )
178215
0 commit comments