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)