从中解码多段线(编码的GeoJSON)废弃铁路网

2024-05-08 13:33:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把铁路线从废弃铁路网,从Alabama开始。我正在用beautifulsoup刮取,然后尝试解码多段线编码的字符串:

import requests
from bs4 import BeautifulSoup
#from pypi / https://github.com/hicsail/polyline
import polyline

state = 'Alabama'
page = requests.get('http://www.abandonedrails.com/'+state)
soup = BeautifulSoup(page.text, 'lxml')
select = soup.find_all('section', class_="route")

for s in select:
    filename = s.attrs['data-filename']
    print(filename)

    encoded_pline = s.attrs['data-routes']
    print(encoded_pline)

    poly = polyline.decode(encoded_pline)
    print(poly)

但是它在第一条叫做阿拉巴马-田纳西-北方铁路的多段线上失败了。我将python的[“替换为'

'sivjEv|exO~@o@z@Y|@Ht@Xv@l@bAj@n@VbALxBFbEGvHw@~WcDfk@yGtBMfCHjBNhA\\dCr@jS|HrJfDnHzBrSbHxXrJlNzE`G~BxEtChDtCtEpE~MvNpIhIvc@jd@fOtNpJfIlMbL`UxRvp@pk@h|@nv@b~@vw@hFtEjDvBpCr@nFXtXhB`En@fDxA~E~CzW|PbCnBjBnBfA`BzAbDfL~V|BxEnCtCxDnDtCxCxBnD|D~GjChCzCxAjEBnFa@jE_ArDcBzG}E|D}Af\\oIzDs@~CStNl@pi@lAbE\\nEv@|{@jQtx@vOdl@xLvGtArHzBzNtEpCv@nFn@bv@fHh^nD`{@dIfEn@dEnA|WvIdE`B`Fv@ln@|FlTvBrYlCvCh@bDdAnCtA`m@lZnNlHnDhBdGpErf@j_@lG~F~LhLzo@dn@`CxChAzBdAnDh@zCPhEIlMk@f{@E|LKjHEpJLvDPdBPlAh@`BjA~C`GzMhQ`_@rLxW`P|]hTre@fSfc@fLhVnY~n@jC`GhCtEtB|BfJtG`DnB`QdKxh@`[pC|AdElCdDzB|BzBfBdCtAnDt@bE|@rItAlPb@xGKhJiAlRgBdVgAfLa@vGAxGbAdGfC~EvD`DdGjBzIjBrLv@~YfFdI|AdFbA|CtA|IpEpLvGnBfA|BzB`BlCz@hC`B|HrE|UdHv^nA~EnBnDfCfCbBhA~EbC`QxHvKfFtCdBrBnB~BhEzB`Gzd@`lAdHbQxAzBfC`CdCjA~HvB|r@tSlYvIlZbJtCl@fF\\lI?~Gw@tm@_Gj~@mJvMuAjHkAnGwBnL{Edi@cU|aA}`@`bA{a@~N_GrDeAtCa@rJGju@k@hAClD?nTYnDDdEd@pd@zFjGdA|ExApDdBlIjFrVbOta@dVrNlIbE|B|ExAjQlGhFdBnCxAvKpHrDbCdo@vc@tHjF|DfBlL~DzXpJbb@pNdg@|PjGnBfKlA~V|CnQnB|StCnLtAd\\dE~W|CpE~@nFtA~[fJfIhCjK|Cr}@lWlg@tN`S`GfUtGbYnI~v@~T|f@`OlFlAzHh@tu@lEpEXzNUd[a@hKFjKhAjInBfGzBpHvDdR`M~^vVbEhCdDfAdCTfCK`Do@bFsBzL{Ftu@k\\~TkK~]iPzD{BnCoDvAsDh@{DdA{GbA}FbBoDpDwDpE{BlPwDlR{EvEm@pGQlNKvUM~~@i@``@Yzy@e@z{@w@|dA{@~dAw@xeA{@fbBqAvDQhD{@tDmCtGyIp\\ed@jBeBdCqArBe@~CUlv@Kb]IzHCbFa@zEmAvZ}JfDcAxCoB~CqC~DiGdEcHzCmBrCeApGi@fg@qCtUuA~]kBjI_AbEcA`Ds@|FK`Eh@bDlAjDrBlE~DpVjUzTtSrNzMdDnB~DpAtFz@jGCvj@qAhr@cB`J]bFm@tMuCbSqEhCYpDBpH|ArZlGbFn@pLYnc@]lk@w@|`@a@j_@]tLQjCLrCv@zChBjR|OdExCrCpAbEVpC?vCa@jNqG`JeE|LwFjB_AzBc@hDO`JBfQRlIXdIbApFpAnMvDfBn@`CElb@GrBBxA\\~CfBlKdGdCfA~Cd@nDTrFYbd@wDvCo@`C_AvCiB~DgFdDkFvg@yx@nGgJdEaEbEiCfFsBtD{@tH?rQz@vc@xB|WrAbXtAdVlAlVbApFHhIo@pEo@dHaB~KeErHcEvHqFjQuNzDuCjG}C|FmAdNmBnZ}DrUuCv_@cF`IuApKsBbVwF`SuEtE_AbF?xEbAvI`D|MzErGhB`HhAdZjDbDNjGSvIqAtDQxF?tGdAt`@vHfaAhRdWnFtL`CrCXpEBnEw@xP}D`IaDlJmErGsBrIyA`VcDdZ_Etf@gHjIyAhFiCdH_FlDkAnCY|Fd@zTdCrQdBjFdAtBl@pCdA|QjJpD`BvD\\xDG~D{@lH}Ct`@{PpE}AzDi@jFJhT`BdMlApDPzDU`HqAvPiEfFiBzIwE~XoObF{BjFkAzDc@|FKnFn@pEfAbv@lR|f@xLlHjB","ketcEhwxyOxElAlE`AbDh@j_@xAvJPrFMjF]~XeDpD]vDMbTv@nl@vBl\\lAxv@fCnQn@tKz@lFhAjFrAtFrBfEvBpJpFdb@lTpf@tWzZtPfd@dVhKdGnCdCpCbExKdRvVxb@lTr_@|I`OpEzIdFlInC`ErA|AlDlC~M`It]`Td]fSdF~BhDlAjFnA`w@pP~EhArF|A|FrB`GfDpHfFxYdTxDrB~ExAnDd@tFFlH{@jXiExK}A~GcC|FsD|_@uWfJ_Hjl@ea@fNwIfF_CzHmCzH}AvKw@vK?zWpAd\\`Bj`AjFfXpApf@pCx~@pEpfAnFzcAxEpKj@zi@hC|FFzCa@nDmAxDcCpEsErTsWbR{T`GmGlHsGlHsFrJeGlMmGlRaI|i@wTzn@gW`JoDzHcAhGIdGv@vFbBfHhDjN`IbE|BfEfArFPd^FbNBnj@Lxh@BfW?xRBvDXhFhBxD`CvKhI|`Atq@fDrBbE~@vFBpHw@bR}ArIw@xIi@bFG`Fl@xYrG~CVzCGjE_AnVsIxD{@tEK`Fz@dKnDxCh@nEC~GuAbN{DhG{@`FBnEn@dLnD|HzBxCr@lDJnWi@`Fc@dFyAtHeDrEeApDS|Dv@|EnCfEbFfEtElEnDjX`TbGpErPbMzErDxEzBjEfB~Cz@zEBnF{@jIkBfd@uJdEoAvGsDrNiJhFkClGgBzGa@hG?~GjA|PnD|Ev@~XdG|[zGn`@dIdJnBjEh@nDKnFcB~FgEfEiCnEyA|IoBxDaB|@g@pKgF~TcLhGyClBgBnDoFxIcNzFyFzFyCvJqCjO}CtCyAnEmEdJ{K|CeCrFsBjM{BpZ}FtGgAdIYh]U|Ee@|CaBdCmClEmGtZ}b@tCyD`EyC`G}AlNsDdNkD`CUlFC`Fr@`NbC|Dz@pDjBtGnFtKlJxEdDdEfBfDbAtLr@p~@hEraApExfAfFx`@nBpGNhOUvR]xCHvCp@|CvBfe@~Y`IjF~BfAlD\\vM?fQCnm@BdZLjIQ|LgAlFo@bDaBdEsGzK{QnD_FrFaGlF}EdBmAxCe@`~@eIr~@_JtSsB`CUrCoArJ{GjUqP|GeE~FqClBkAlBkDzCaGvAiClB}AvFkBhb@_L~]_JtOcEfTuFlLaF`M{EdMeEjLqE`FsB~D{@`FTrFpAjC`@rEGdIyAjh@sK~N_FxSsJlCoBtC_FdTac@dCiE`DqEnEqEhEyFvCsDvD{BbGkAdVeEzBeArCeD`FeK~CwKzA{CtCgCfT}QnDiBtCFjD|AnLrFjCdAdFJ~NkA|g@kDnDYzEXhq@vFlGn@nLtClNzD~TfHrPtCzVrEbFz@zBp@bClAlClChJbNhQbXrCvDxDfCzVnMpTtLdIzDnBf@rCXfHQhFa@bCs@jCuC`EeEpC}AfDw@x^sFvDw@bDuAdFgDdPwJpCyA|D{@ta@iEh_AgKh[iDjHyAtKkDrOgFxGoBzLwBfWcFbVyE~JkB~De@pNG~MIlF{@nEwBrZsQlJoFzBiArDm@bFI|ElA|FvBjHfDlBp@rE?hDa@tCmBpD_FhHuLvIaOlAiCbC}HdIiXrBqHpAsDrBaDbFuH`^_f@fD_FxDqG`EaKzH_Sr[uz@fMs\\hF{PnEaQ`DgJxGcOlEaIrDeEvJiIdPcNzHmH|CiDxHyLl[eh@dIaMdEoG`GwFlJgHh`@yYzVsRvEcEjDwEjJmOnTe_@tB_DbCuAlFuAvK_ChEoBdCwBfBaDfCaCdFyCzb@eR~BgAhDc@hFTrDxAbRpJnY|NbRxLxC`B|Cv@pELzEeAzFwBfGwB~GcArLYt]O|EMhFcApQ}DjNqCvKgApYgBrQyAjDObF\\xYhBjh@jDfFXdDpAtDpCfGhGb[`]nCnChCpAbElAvEh@~f@~EdDP|GFvKM~Ea@tF}AxCaBtCgBhDsDxFiGlCgBhE{@vEa@dHa@zEgAdGeC~EsDfH_FxBmBfDcFtTe_@jBiEzAeI~Fa_@zDsQdF_Q|FqPrHkOpLuTdLeT~BeGv@yHdDi]zBwU^uDUgEoAaLo@cEwB_FmHeKkKsK{EwH}CiJgEuPeIk\\kD}NaA}JuBwa@?mIPaIzAkMbCsMz@sDlBqChF_H`GyInHaLzA}C|@yCTmGYsg@ByHj@mGzAeG|Joc@bBeElCwFbCqJfBmK`AoObC}`@HmEAmG]oKn@mG|AeIfCoHrD{E|EqCtC{@dEw@dKOrk@Yty@k@l}@a@fbAi@xb@]t`@UzLG|ICpF\\xFdBbT`Ib_@pNre@`RdRbHzRbHr\\xLvDjApF`@hIP|u@z@bh@r@db@\\jo@r@p{@t@nY\\tuApAzp@z@tSL~\\h@~QXlEXdKrA","cbvjEp{exOs@{A]cCJyE","atrjEdqexO~@~@l@jBPjBChI","o{qjEv|exO`BhBfCzCpBtC","yceiEj~_yOb@lAr@p@p@TxEB","edeiEvg`yOd@_Ap@w@|@]","kdeiEhs`yOSfCq@vBsAnBaCnB","eieiEx~`yOn@iBZsBLmCBeE","c_eiEvfayO{AeAgD_AwDG","wpbiE`teyOU_CBqCl@uCfAuApAa@dEB","orbhEptvyOz@n@jA~@f@n@ZfA","ambhEptvyOcB{@g@uAQgA","}_ogEvx~yO`BGrABfA\\x@~@rAbA","adieEtp~yO`AoArAsBbA_B","siheE|a~yOjCOrBM`BSpBeAjAcAnAqA~E}A","ixgeEdx}yOzBiAvBaB|AmCTmC_@yC","yntcE|sxyO|AbAjAzAj@`BDnBCzB","ormcEn`yyOiC_AoAmCSmCh@aElC_T","qhobErlbzOxBe@rAw@~BsB","gqyaEzc_zOgCs@wAgA_@uAGoB","ucvaEld_zOvJoB","o~paExjazO_FtAeBbA","{u_aEtobzO~ABzBe@pFgA","m}|`E|jczO}CyAqBqCu@eCKeBTmA","kyz`EhxbzO{@nAg@lA","mwz`E`wbzOeAvBa@fB","gmr_E|gzyOdDE~Ce@|DuAbDsB","cm__EnttyO~DlB`D~A","ijy|D`bexOnCy@hBaCdAeDJwDGaEBkGWqG{CyL}@mEUwEF}HPiOCeNUiPQ_JQqCk@aD?qEvDow@^cGImE{@qCuCqCmByAuBk@_FT","ijy|D`bexOpnAr\\~BbDhAzDf@tEZrGIhGg@nHo@lL]vBg@nA","y`y|DfzcxOfAbEz@|Dx@~BvAnBz@~@'

Python是否有使用逗号或引号的问题?或者它失败的原因不同?你知道吗


Tags: fromimportcompagefilenamerequestsselectstate
2条回答

data-routes属性中编码的信息是JSON格式的,因此您需要首先使用pythonjson库对其进行转换。你知道吗

此操作的输出是一个段列表,如果将这些段单独传递给您的库,您将得到所需的:

import matplotlib.pyplot as plt
import requests
from bs4 import BeautifulSoup
#from pypi / https://github.com/hicsail/polyline
import polyline
import json

state = 'Alabama'
page = requests.get('http://www.abandonedrails.com/'+state)
soup = BeautifulSoup(page.text, 'lxml')
select = soup.find_all('section', class_="route")

for s in select:
    print(s['data-filename'])
    encoded_pline = json.loads(s['data-routes'])

    for segment in encoded_pline:
        poly = polyline.decode(segment)
        lats, longs = list(zip(*poly))
        plt.plot(longs, lats)

plt.show() 

这将使用Matplotlib提供如下输出: matplotlib plot of polylines

使用Python3.6.7测试

您的多段线字符串是为JavaScript编码的。为了能够与Python一起使用它,应该删除转义。使用decodePath()作为解码函数:

output = str(decodePath(entry.replace('\\\\', '\\')))

相关问题 更多 >