una operaciones leer importar exportar datos crear con como columnas columna archivos archivo python csv beautifulsoup export screen-scraping

operaciones - leer columnas en python



escribiendo y guardando archivos CSV desde datos raspados usando Python y Beautifulsoup4 (2)

Estoy tratando de obtener datos del sitio web de PGA.com para obtener una tabla de todos los campos de golf en los Estados Unidos. En mi tabla de CSV, quiero incluir el nombre del campo de golf, dirección, propiedad, sitio web, número de teléfono. Con estos datos me gustaría geocodificarlo y colocarlo en un mapa y tener una copia local en mi computadora

Utilicé Python y Beautiful Soup4 para extraer mis datos. He llegado tan lejos para extraer los datos del sitio web, pero tengo dificultades para escribir el script para exportar los datos a un archivo CSV que muestra los parámetros que necesito.

Adjunto a continuación está mi script. Necesito ayuda para crear código que transfiera el código extraído a un archivo CSV y cómo guardarlo en mi escritorio.

Aquí está mi script a continuación:

import csv import requests from bs4 import BeautifulSoup url = "http://www.pga.com/golf-courses/search?searchbox=Course+Name&searchbox_zip=ZIP&distance=50&price_range=0&course_type=both&has_events=0" r = requests.get(url) soup = BeautifulSoup(r.content) g_data1=soup.find_all("div",{"class":"views-field-nothing-1"}) g_data2=soup.find_all("div",{"class":"views-field-nothing"}) for item in g_data1: try: print item.contents[1].find_all("div",{"class":"views-field-counter"})[0].text except: pass try: print item.contents[1].find_all("div",{"class":"views-field-course-type"})[0].text except: pass for item in g_data2: try: print item.contents[1].find_all("div",{"class":"views-field-title"})[0].text except: pass try: print item.contents[1].find_all("div",{"class":"views-field-address"})[0].text except: pass try: print item.contents[1].find_all("div",{"class":"views-field-city-state-zip"})[0].text except: pass

Esto es lo que obtengo actualmente cuando ejecuto el script. Quiero tomar estos datos y convertirlos en una tabla CSV para geocodificar más tarde.

1801 Merrimac Trl Williamsburg, Virginia 23185-5905 12551 Glades Rd Boca Raton, Florida 33498-6830 Preserve Golf Club 13601 SW 115th Ave Dunnellon, Florida 34432-5621 1000 Acres Ranch Resort 465 Warrensburg Rd Stony Creek, New York 12878-1613 1757 Golf Club 45120 Waxpool Rd Dulles, Virginia 20166-6923 27 Pines Golf Course 5611 Silverdale Rd Sturgeon Bay, Wisconsin 54235-8308 3 Creek Ranch Golf Club 2625 S Park Loop Rd Jackson, Wyoming 83001-9473 3 Lakes Golf Course 6700 Saltsburg Rd Pittsburgh, Pennsylvania 15235-2130 3 Par At Four Points 8110 Aero Dr San Diego, California 92123-1715 3 Parks Fairways 3841 N Florence Blvd Florence, Arizona 85132 3-30 Golf & Country Club 101 Country Club Lane Lowden, Iowa 52255 401 Par Golf 5715 Fayetteville Rd Raleigh, North Carolina 27603-4525 93 Golf Ranch 406 E 200 S Jerome, Idaho 83338-6731 A 1 Golf Center 1805 East Highway 30 Rockwall, Texas 75087 A H Blank Municipal Course 808 County Line Rd Des Moines, Iowa 50320-6706 A-Bar-A Ranch Golf Course Highway 230 Encampment, Wyoming 82325 A-Ga-Ming Golf Resort, Sundance 627 Ag A Ming Dr Kewadin, Michigan 49648-9397 A-Ga-Ming Golf Resort, Torch 627 Ag A Ming Dr Kewadin, Michigan 49648-9397 A. C. Read Golf Club, Bayou Bldg 3495, Nas Pensacola Pensacola, Florida 32508 A. C. Read Golf Club, Bayview Bldg 3495, Nas Pensacola Pensacola, Florida 32508


En primer lugar, quiere poner todos sus elementos en una lista y luego escribirlos en un archivo más adelante en caso de que haya un error mientras está desechando. En lugar de imprimir simplemente anexar a una lista. Entonces puedes escribir en un archivo csv

f= open(''filename'', ''wb'') csv_writer = csv.writer(f) for i in main_list: csv_writer.writerow(i) f.close()


Todo lo que necesita hacer aquí es colocar su salida en una lista y luego usar la biblioteca CSV para exportarla. No estoy del todo claro sobre lo que está obteniendo vistas-campo-nada-1, pero para centrarme en campos de vista-nada, podría hacer algo como:

courses_list=[] for item in g_data2: try: name=item.contents[1].find_all("div",{"class":"views-field-title"})[0].text except: name='''' try: address1=item.contents[1].find_all("div",{"class":"views-field-address"})[0].text except: address1='''' try: address2=item.contents[1].find_all("div",{"class":"views-field-city-state-zip"})[0].text except: address2='''' course=[name,address1,address2] courses_list.append(course)

Esto colocará los cursos en una lista, a continuación puede escribirlos en un cvs así:

import csv with open (''filename.cv'',''wb'') as file: writer=csv.writer(file) for row in course_list: writer.writerow(row)