Wie kann ich loop-scraping Daten für mehrere Seiten in einer website mithilfe von python und beautifulsoup4

Ich versuche, mich zu kratzen, Daten aus dem PGA.com website, um eine Tabelle aller von den Golfplätzen in den Vereinigten Staaten. In meiner CSV-Tabelle möchte ich den Namen des Golfplatzes ,der Adresse ,der Eigentumsverhältnisse ,Website , Telefonnummer. Mit diesen Daten möchte ich geocode und lege es in eine Karte und eine lokale Kopie auf meinem computer

Setzte ich Python und Schöne Soup4 meine Daten zu extrahieren. Erreicht habe ich so weit um die Daten zu extrahieren und importieren Sie Sie in eine CSV-Datei aber jetzt habe ich ein problem, Schaben, Daten aus mehreren Seiten auf der PGA-website. Ich möchte, um zu extrahieren ALLE GOLF-KURSE, aber mein script ist nur auf einer Seite möchte ich Schleife es in den Weg, dass Sie erfassen alle Daten für die Golfplätze von allen Seiten finden Sie in der PGA-Website. Es gibt über 18000 gold Kurse und 900 Seiten Daten zu erfassen

Unten angehängt ist mein Skript. Ich brauche Hilfe zum erstellen von code, der die Erfassung ALLER Daten von der PGA-website und nicht nur eine Seite sondern mehrere. Auf diese Weise wird es mir zur Verfügung stellen, mit allen Daten von gold Kurse in den Vereinigten Staaten.

Hier ist mein Skript:

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"})

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=''
     try:
          website=item.contents[1].find_all("div",{"class":"views-field-website"})[0].text
     except:
          website=''   
     try:
          Phonenumber=item.contents[1].find_all("div",{"class":"views-field-work-phone"})[0].text
     except:
          Phonenumber=''      

     course=[name,address1,address2,website,Phonenumber]
     courses_list.append(course)

     with open ('filename5.csv','wb') as file:
          writer=csv.writer(file)
          for row in courses_list:
               writer.writerow(row)    

#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

Dieses Skript erfasst nur 20 auf einmal und ich will alles in einem script, welches Konto für 18000 Golfplätze und 900 Seiten kratzen Sie die form.

InformationsquelleAutor Gonzalo68 | 2015-06-25

Schreibe einen Kommentar