我試圖從網站上刮取一些json數據。我使用BeautifulSoup (bs4)
如下面的代碼中Beautifulsoup Parser截斷較大的json
import re
import csv
import json
import urllib2
from bs4 import BeautifulSoup as BS
city = 'Helsinki';
csvFile = csv.writer(open(city + ".csv", "wb+"))
csvFile.writerow(["tempid","latitude", "longitude"])
pageID = 0
locPage = urllib2.urlopen("http://runkeeper.com/user/maxspowers79/route/2481336")
soup = BS(locPage, "lxml").findAll('script',{"src":False})
print soup
pageID += 1
print pageID
for s in soup:
if 'routePoints' in s.string:
value = "[{" + s.string.split("}];")[0].split("[{")[1] + "}]"
#print value
jsonObj = json.loads(value)
for x in jsonObj:
csvFile.writerow([pageID,x["latitude"],x["longitude"]])
作爲一個例子,這是runkeeper網站,我測試過上一個隨機地城和隨機路線。該代碼適用於其他類似網頁,但適用於更長的路線(如果您在瀏覽器中查看源代碼,則使用更大的gps json)。
soup
變量將被截斷,如您從發出的打印命令中看到的那樣。因此,json無效,我無法解析它。
我嘗試過使用不同的解析器(html5lib),但那樣更糟。變量能容納多少字符串有多大?
否則爲什麼會截斷?
我該如何處理?
我已經測試了一個包含json變量''routePoints''中超過9萬個座標的虛擬runkeeper頁面,並且它工作正常,解析良好,所有項目都保存在輸出中文件。 我想這不是BeautifulSoup問題,因爲你的代碼對我來說工作得很好。 – AniversarioPeru
@AniversarioPeru您是否嘗試過我發佈的這個特定的管理員頁面? – sfactor
是的,並沒有與該特定頁面的問題。這就是爲什麼我增加了數據量來查看它是否會失敗。 – AniversarioPeru