【发布时间】:2015-06-30 22:28:45
【问题描述】:
我正在尝试收集有关美国所有高尔夫球场的信息。我创建了一个脚本来从 PGA 网站上抓取数据,该网站提供了大约 18000 个高尔夫球场。所以我的脚本运行不正常,我在修复它时遇到了问题。它假设为所有权创建一个列,假设它是私有的还是公共的,它提供信息。我能够找到这些信息,但是在执行时它被放置在 CSV 的随机部分中,并且没有与其正确的高尔夫球场信息相结合。我该如何解决它会为我提供来自姓名、地址、电话号码和网站的所有必要数据。
第二个地址字段我想解析出要分发到我的 CSV 中不同列的信息。我希望将地址字段分解为街道名称和编号、城市、CA、邮政编码和国家/地区。
最后,我想知道是否可以创建一个函数,当地址的字符串中有一个邮政信箱时,它将被移动到另一个名为邮政信箱的列中。我该怎么做?
我想将所有这些信息保存到包含我需要的所有数据的 CSV 中
这是我的脚本:
import csv
import codecs
import requests
from bs4 import BeautifulSoup
courses_list = []
for i in range(1): # 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_data1=soup.find_all("div",{"class":"views-field-nothing-1"})
g_data2=soup.find_all("div",{"class":"views-field-nothing"})
for item in g_data2 and g_data1:
try:
ownership = item.contents[1].find_all("div",{"class":"views-field-course-type"})[0].text
print (ownership)
except:
ownership = ''
try:
name = item.contents[1].find_all("div",{"class":"views-field-title"})[0].text
print name
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,ownership]
courses_list.append(course)
with open ('Testing.csv','a') as file:
writer=csv.writer(file)
for row in courses_list:
writer.writerow([s.encode("utf-8") for s in row])
【问题讨论】:
-
您能否给出一个直观的示例来说明您希望输出的样子?这将有助于弄清楚您需要 CSV 的外观。
标签: python parsing csv beautifulsoup scrape