Wie kann ich mit Python und beautifulsoup4 @ das Scrappen von Daten für mehrere Seiten einer Website in einer Schleife durchführe

Ich versuche, Daten von der PGA.com-Website zu kratzen, um eine Tabelle aller Golfplätze in den Vereinigten Staaten zu erhalten. In meiner CSV-Tabelle möchte ich den Namen des Golfplatzes, die Adresse, den Eigentümer, die Website und die Telefonnummer angeben. Mit diesen Daten möchte ich sie geocodieren und in eine Karte einfügen und eine lokale Kopie auf meinem Computer haben

Ich habe Python und Beautiful Soup4 verwendet, um meine Daten zu extrahieren. Ich habe es bis jetzt geschafft, die Daten zu extrahieren und in eine CSV-Datei zu importieren, aber jetzt habe ich ein Problem damit, Daten von mehreren Seiten auf der PGA-Website zu entfernen. Ich möchte ALLE GOLFPLÄTZE extrahieren, aber mein Skript ist auf eine Seite beschränkt. Ich möchte es so einschleifen, dass alle Daten für Golfplätze von allen Seiten erfasst werden, die auf der PGA-Site zu finden sind. Es gibt ungefähr 18000 Goldkurse und 900 Seiten zum Erfassen von Daten

Attached unten ist mein Skript. Ich benötige Hilfe beim Erstellen von Code, der ALLE Daten von der PGA-Website erfasst und nicht nur eine Website, sondern mehrere. Auf diese Weise werden mir alle Daten von Goldkursen in den Vereinigten Staaten zur Verfügung gestellt.

Hier ist mein Skript unten:

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 möchte alles in einem Skript erfassen, das 18000 Golfplätze und 900 Seiten zum Abschaben ausmacht.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage