Devpal18's picture
Update app.py
c0d86ee verified
Raw
History Blame Contribute Delete
2.26 kB
import gradio as gr
import pandas as pd
import requests
from bs4 import BeautifulSoup
import time
def scrape_yellowpages(keyword, location, pages):
results = []
pages = int(pages)
headers = {
"User-Agent": "Mozilla/5.0"
}
for page in range(1, pages + 1):
url = f"https://www.yellowpages.com/search?search_terms={keyword}&geo_location_terms={location}&page={page}"
response = requests.get(url, headers=headers)
if response.status_code != 200:
return None, None, "Failed to fetch data."
soup = BeautifulSoup(response.text, "html.parser")
listings = soup.find_all("div", class_="result")
for listing in listings:
try:
name = listing.find("a", class_="business-name").text.strip()
except:
name = ""
try:
phone = listing.find("div", class_="phones").text.strip()
except:
phone = ""
try:
address = listing.find("div", class_="street-address").text.strip()
except:
address = ""
results.append({
"Business Name": name,
"Phone": phone,
"Address": address
})
time.sleep(1)
if len(results) == 0:
return None, None, "No results found."
df = pd.DataFrame(results)
df.drop_duplicates(inplace=True)
file_name = "yellowpages_leads.csv"
df.to_csv(file_name, index=False)
return df, file_name, "Leads scraped successfully."
with gr.Blocks() as demo:
gr.Markdown("## Real Business Lead Scraper (YellowPages)")
keyword_input = gr.Textbox(label="Business Type (e.g. dentist)")
location_input = gr.Textbox(label="Location (e.g. Chicago)")
pages_input = gr.Number(value=1, label="Number of Pages (1 page ≈ 30 leads)")
scrape_button = gr.Button("Scrape Leads")
output_table = gr.Dataframe()
download_file = gr.File()
status_output = gr.Textbox(label="Status")
scrape_button.click(
scrape_yellowpages,
inputs=[keyword_input, location_input, pages_input],
outputs=[output_table, download_file, status_output]
)
demo.launch()