Download app.py from Devpal18/google-maps-lead-scraper: direct link, hf CLI and curl.
- Browser
- Download file 2.26 kB
-
https://huggingface.co/spaces/Devpal18/google-maps-lead-scraper/resolve/main/app.py
- Command line
-
hf download hf://spaces/Devpal18/google-maps-lead-scraper/app.py
-
curl -L -o app.py https://huggingface.co/spaces/Devpal18/google-maps-lead-scraper/resolve/main/app.py
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() | |