2015-06-29 29 views
0

我想通過this link來提取美國所有高爾夫球場的清單。我需要提取高爾夫球場的名稱,地址和電話號碼。我的腳本假設從網站中提取所有數據,但它看起來只能在我的csv文件中打印一行。我注意到,當我打印「名稱」字段時,儘管有find_all函數,但它僅打印一次。我需要的只是數據,而不僅僅是來自網站上多個鏈接的一個字段。網站刮後只寫了一行

如何解決我的腳本問題,以便將所有需要的數據打印到CSV文件中。

這裏是我的腳本:

import csv 
import requests 
from bs4 import BeautifulSoup 

courses_list = [] 

for i in range(1): 
url="http://www.thegolfcourses.net/page/1?ls&location=California&orderby=title&radius=6750#038;location=California&orderby=title&radius=6750" #.format(i) 
r = requests.get(url) 
soup = BeautifulSoup(r.content) 


g_data2=soup.find_all("div",{"class":"list"}) 

for item in g_data2: 
    try: 
    name= item.contents[7].find_all("a",{"class":"entry-title"})[0].text 
    print name 
    except: 
     name='' 
    try: 
    phone= item.contents[7].find_all("p",{"class":"listing-phone"})[0].text 
    except: 
     phone='' 
    try: 
    address= item.contents[7].find_all("p",{"class":"listing-address"})[0].text 
    except: 
     address='' 

    course=[name,phone,address] 
    courses_list.append(course) 


with open ('PGN_Final.csv','a') as file: 
    writer=csv.writer(file) 
    for row in courses_list: 
      writer.writerow([s.encode("utf-8") for s in row]) 
+0

您的縮進遍佈整個地方,發佈的代碼甚至不會執行。正如所寫的,'courses_list.append()'調用*完全在'g_data2'循環中的'for item之外,因此只會執行一次,但由於其他縮進也是一團糟,所以我無法確定如果這是你的問題。 –

+0

我對此表示抱歉。 – Gonzalo68

+0

在那個頁面上只有一個這樣的'div'。 –

回答

0

這裏是你的代碼整潔的實現。您可以使用庫urllib2而不是requests。而bs4雖然工作相同。

import csv 
import urllib2 
from BeautifulSoup import * 

url="http://www.thegolfcourses.net/page/1?ls&location=California&orderby=title&radius=6750#038;location=California&orderby=title&radius=6750" #.format(i) 
r = urllib2.urlopen(url).read() 
soup = BeautifulSoup(r) 

courses_list = [] 
courses_list.append(("Course name","Phone Number","Address")) 

names = soup.findAll('h2', attrs={'class':'entry-title'}) 
phones = soup.findAll('p', attrs={'class':'listing-phone'}) 
address = soup.findAll('p', attrs={'class':'listing-address'}) 
for na, ph, add in zip(names,phones, address): 
    courses_list.append((na.text,ph.text,add.text)) 


with open ('PGN_Final.csv','a') as file: 
    writer=csv.writer(file) 
    for row in courses_list: 
     writer.writerow([s.encode("utf-8") for s in row])