Spaces:
Running
Running
File size: 1,510 Bytes
16a610b 4b109de 16a610b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import csv
import gradio as gr
from duckduckgo_search import DDGS
def search_duckduckgo(query: str, max_results: int = 1000):
results = []
with DDGS() as ddgs:
for r in ddgs.text(query, max_results=max_results):
results.append(r['href'])
return results
def save_urls_to_csv(urls, filename="duckduckgo_search_urls.csv"):
with open(filename, mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["URL"])
for url in urls:
writer.writerow([url])
return filename
def search_and_save(query, max_results):
urls = search_duckduckgo(query, max_results)
csv_file = save_urls_to_csv(urls)
return urls, csv_file
with gr.Blocks() as demo:
gr.Markdown("## 🔍 DuckDuckGo Search Interface")
with gr.Row():
query_input = gr.Textbox(label="Search Query", placeholder="Enter your search query here")
max_results_input = gr.Slider(minimum=1, maximum=100, value=10, step=1, label="Max Results")
search_button = gr.Button("Search")
results_output = gr.Dataframe(headers=["URL"], label="Search Results")
download_output = gr.File(label="Download CSV")
def on_search_click(query, max_results):
urls, csv_file = search_and_save(query, max_results)
return [urls], csv_file
search_button.click(
fn=on_search_click,
inputs=[query_input, max_results_input],
outputs=[results_output, download_output]
)
demo.launch()
|