【发布时间】:2020-12-27 14:07:02
【问题描述】:
我试图从website 中抓取表格,但我得到一个空的 csv 文件,仅包含标题。
我尝试了来自 post 的代码。我不知道我的代码发生了什么,为什么它返回一个空表。
我的代码:
url = "http://www.peaklist.org/WWlists/WorldTop50.html"
r = requests.get(url)
data= r.text
soup=BeautifulSoup(data,"html.parser")
scripts = soup.find_all("script")
file_name = open("table.csv","w",newline="")
writer = csv.writer(file_name)
list_to_write = []
list_to_write.append(["Summit Name", "Country", "Lat.", "Long.", "Elevation mtrs.", "Prom. mtrs.", "Saddle mtrs.", "Saddle Location", "Elevation ft.", "Prom. ft.", "Notes", "Aerial Photo" ])
for script in scripts:
text = script.text
start = 0
end = 0
if(len(text) > 10000):
while(start > -1):
start = text.find('"Summit Name":"',start)
if(start == -1):
break
start += len('"Summit Name":"')
end = text.find('"',start)
summit_name = text[start:end]
#start = text.find('"Summit Name":"',start)
#start += len('"Summit Name":"')
#end = text.find('"',start)
#summit_name = text[start:end]
start = text.find('"Country":"',start)
start += len('"Country":"')
end = text.find('"',start)
country = text[start:end]
start = text.find('"Lat.":"',start)
start += len('"Lat":"')
end = text.find('"',start)
lat = text[start:end]
start = text.find('"Long.":"',start)
start += len('"Long.":"')
end = text.find('"',start)
long = text[start:end]
start = text.find('"Elevation mtrs.":"',start)
start += len('"Elevation mtrs.":"')
end = text.find('"',start)
elevation = text[start:end]
start = text.find('"Prom. mtrs.":"',start)
start += len('"Prom. mtrs.":"')
end = text.find('"',start)
prom = text[start:end]
start = text.find('"Saddle mtrs.":"',start)
start += len('"Saddle mtrs.":"')
end = text.find('"',start)
saddle = text[start:end]
start = text.find('"Saddle Location":"',start)
start += len('"Saddle Location":"')
end = text.find('"',start)
saddle_loc = text[start:end]
start = text.find('"Elevation ft.":"',start)
start += len('"Elevation ft.":"')
end = text.find('"',start)
elevation_ft = text[start:end]
start = text.find('"Prom. ft.":"',start)
start += len('"Prom. ft.":"')
end = text.find('"',start)
prom_ft = text[start:end]
start = text.find('"Notes":"',start)
start += len('"Notes":"')
end = text.find('"',start)
notes = text[start:end]
start = text.find('"Aerial Photo":"',start)
start += len('"Aerial Photo":"')
end = text.find('"',start)
aerial = text[start:end]
list_to_write.append([summit_name,country,lat,long,elevation,prom,saddle,saddle_loc,elevation_ft,prom_ft,notes,aerial])
writer.writerows(list_to_write)
file_name.close()
我没有收到此代码的错误消息,只是一个空表,所以我认为此方法可能无法识别网站中的表数据?
谢谢!!
【问题讨论】:
-
我认为问题出在你的逻辑上
-
预期输出是多少?从您期望的 csv 中发布一些行。
-
@Jarvis csv 文件应该包含以下列:summit_name,country,lat,long,elevation,prom,saddle,saddle_loc,elevation_ft,prom_ft,notes,aerial
标签: python web-scraping