<br> 标签把我的数据搞砸了,因为我用漂亮的汤抓取了数据,python
<br> tag screwing up my data from scraping using beautiful soup and python
我正在尝试从给定网站获取详细的高尔夫球场列表。我创建了一个 scraper 工具来抓取美国不同高尔夫球场的名称和地址。
我的问题是在我能够抓取的地址中。我注意到当抓取到我的 CSV 文件中时,第一行文本和第二行文本之间没有 space。在 HTML 文件中,我注意到两行文本由 <br>
标记分隔。
我如何在我的代码中解决这个问题,以便我抓取的两行文本在抓取成 CSV 时在它们之间提供 space?
这里是 HTML 我试图抓取的样子:
<div class="location">10924 Verterans Memorial Dr<br>Abbeville, Louisiana, United States</div>
我抓取的代码的输出如下所示:
10924 Verterans Memorial DrAbbeville, Louisiana, United States
请注意,“Memorial Dr”和“Abbeville”之间没有 space。我如何更改它,以便它在被抓取时提供 space?
这是我的代码:
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)
BeautifulSoup 标签的 text
属性 returns 由标签的所有子字符串组成的字符串,使用默认分隔符(空字符串)连接。要替换不同的分隔符,您可以使用 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
我正在尝试从给定网站获取详细的高尔夫球场列表。我创建了一个 scraper 工具来抓取美国不同高尔夫球场的名称和地址。
我的问题是在我能够抓取的地址中。我注意到当抓取到我的 CSV 文件中时,第一行文本和第二行文本之间没有 space。在 HTML 文件中,我注意到两行文本由 <br>
标记分隔。
我如何在我的代码中解决这个问题,以便我抓取的两行文本在抓取成 CSV 时在它们之间提供 space?
这里是 HTML 我试图抓取的样子:
<div class="location">10924 Verterans Memorial Dr<br>Abbeville, Louisiana, United States</div>
我抓取的代码的输出如下所示:
10924 Verterans Memorial DrAbbeville, Louisiana, United States
请注意,“Memorial Dr”和“Abbeville”之间没有 space。我如何更改它,以便它在被抓取时提供 space?
这是我的代码:
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)
BeautifulSoup 标签的 text
属性 returns 由标签的所有子字符串组成的字符串,使用默认分隔符(空字符串)连接。要替换不同的分隔符,您可以使用 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