2015-07-02 42 views
2

我想從一個給定的網站獲得高爾夫球場的詳細列表。我創建了一個刮刀工具來刮掉美國不同高爾夫球場的名稱和地址。<br>標籤搞砸我的數據從使用美麗的湯和蟒蛇刮

我的問題是,在我能夠刮的地址。我注意到在第一行文本和第二行文本之間沒有空格,當我把它們寫入我的CSV文件時。在HTML文件中,我注意到兩行文本之間用<br>標記分隔。

如何在我的代碼中執行此操作,以便我刮取的兩行文本在刮到CSV時將在它們之間提供空格?

下面是HTML的樣子我想湊這個樣子的:

<div class="location">10924 Verterans Memorial Dr<br>Abbeville, Louisiana, United States</div> 

和我的代碼,刮它看上去是這樣的輸出:

10924 Verterans Memorial DrAbbeville, Louisiana, United States 

注意, 「紀念博士」和「阿比維爾」之間沒有空格。如何修改它以便在刮擦時提供空間?

這裏是我的代碼:

import csv 
import requests 
from bs4 import BeautifulSoup 

courses_list = [] 
geolocator = ArcGIS() 

for i in range(1): 
    url="http://sites.garmin.com/clsearch/courses/search?course=&location=&country=US&state=&holes=&radius=&lang=en&search_submitted=1&per_page={}".format(i*20) 
    r = requests.get(url) 
    soup = BeautifulSoup(r.text, 'lxml') 
    #print soup 
    g_data2 = soup.find_all("div",{"class":"result"}) 
    #print g_data2 
    for item in g_data2: 
     try: 
      name = item.find_all("div",{"class":"name"})[0].text 
      print name 
     except: 
      name='' 
      print "No Name found!" 
     try: 
      address= item.find_all("div",{"class":"location"})[0].text 
      print address 
     except: 
      address='' 
      print "No Address found!" 

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

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

回答

3

一個BeautifulSoup標籤的text屬性返回一個標籤的所有子串組成的字符串,使用默認的分隔符(空字符串)連接在一起。要替換不同的分隔符,可以使用get_text()方法。

address_tag<div>問題:

>>> print address_tag.get_text(separator=' ') 
## 10924 Verterans Memorial Dr Abbeville, Louisiana, United States 

或重新創建多行:

>>> print address_tag.get_text(separator='\n') 
## 10924 Verterans Memorial Dr 
## Abbeville, Louisiana, United States 

您還可以通過單獨提取串完成最後的結果:

>>> for s in at.strings: 
...  print s 
... 
## 10924 Verterans Memorial Dr 
## Abbeville, Louisiana, United States