【发布时间】:2015-09-14 02:40:28
【问题描述】:
我的目标是从 PGA 网站上抓取数据,以提取美国的所有高尔夫球场位置。我的目标是从 907 页中刮取姓名、地址、所有权、电话号码和网站。
我已经创建了下面的脚本,但是在创建 CSV 时会产生错误。从脚本创建的 CSV 文件具有前几页和网站页面的数据重复。它没有给出 907 页的全部数据。
如何修复我的脚本,以便它可以抓取所有 907 页并生成包含 PGA 网站上列出的所有高尔夫球场的 CSV?
下面是我的脚本:
import csv
import requests
from bs4 import BeautifulSoup
for i in range(907): # Number of pages plus one
url = "http://www.pga.com/golf-courses/search?page={}&searchbox=Course+Name&searchbox_zip=ZIP&distance=50&price_range=0&course_type=both&has_events=0".format(i)
r = requests.get(url)
soup = BeautifulSoup(r.content)
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 ('PGA_Data.csv','a') as file:
writer=csv.writer(file)
for row in courses_list:
writer.writerow(row)
【问题讨论】:
-
我不明白。您正在获取页面内容 907 次,但只处理最后一次?
-
我正在尝试从 PGA 网站的 907 个页面或实例中提取数据,并尝试通过创建一个循环来完成该过程,该循环将通过网站并收集所有数据。我需要收集大约 907 页的数据,但我的循环不起作用。
-
是的,但是每次调用
soup = BeautifulSoup(r.content)都会丢失上一页的所有数据。在获取新网页之前,您需要解析当前网页。 -
通过解析,我的意思是收集所有信息并将其保存到 csv 文件(脚本的第二部分)
-
这就是我认为我所做的。我怎样才能不丢失数据?你能帮我构建脚本吗?
标签: python csv beautifulsoup