簡體   English   中英

使用python scraping從嵌入在網頁中的傳單應用獲取坐標

[英]Get coordinates from leaflet app embedded in webpage using python scraping

我正在嘗試從一個網頁下載點的坐標(捷克共和國的ATM),該網頁使用嵌入式傳單來可視化這些點。

這是網頁:(使用捷克語)

http://www.kurzy.cz/banky/bankomaty/zatec-okres-louny/

我正在使用python3

到目前為止,我所做的是使用urllib下載網頁和漂亮的湯,以某種方式對其進行格式化。

from bs4 import BeautifulSoup
import urllib

url = 'http://www.kurzy.cz/banky/bankomaty/zatec-okres-louny/'

raw_text = urllib.request.urlopen(url).read()
utf_text = raw_text.decode('utf-8')
soup = BeautifulSoup(utf_text)

scripts = soup.findAll("script")
scripts

我要獲取的內容隱藏在“ point_list”變量中-它包含ATM的坐標和名稱,但是我無法成功獲取此變量。

...
point_list = ['', '/static/vizualizace/leaflet/img/icon/banky/zluta_bankomaty.svg', [50.3165463776, 13.535562001, '<b>Česká spořitelna</b><br />Husova 2908, Žatec<br />...
...

我嘗試了但沒有起作用的東西:

for link in soup.find_all("script"):
    if "point" in link:
        print(link)

它不會打印任何內容。

我必須缺少一些重要的東西,而且似乎找不到答案。 我沒有很多刮刮的經驗,我之前只刮過一些超鏈接,這非常簡單。

更新:

感謝您提供@vold的答案,因此我可以將其用作所需的啟動器。

list_addresses = []
# first split by left bracket
for item in all_address.split('['):
    # then replace redundant characters
    replace_item1 = item.replace("<br /><b>GPS: </b>", ',')
    replace_item2 = replace_item1.replace("</b><br />", ",")
    replace_item = replace_item2.replace("'<b>", "")
    # and split an element (one ATM) by comma, creating a list of lists
    clean_item = replace_item.split(',')
    # strip whitespace
    strip_list = list(map(str.strip, clean_item))
    # creates list of lists
    list_addresses.append(strip_list)

# I don't need the first element  
Table = pd.DataFrame(list_addresses[1:])
Table

我認為這不是一個干凈的解決方案,如果有更優雅的方法,我將不勝感激。

謝謝

您可以使用parsel庫和regex從頁面源獲取所需的值,如下所示:

import requests
from parsel import Selector


url = 'http://www.kurzy.cz/banky/bankomaty/zatec-okres-louny/'
r = requests.get(url)
sel = Selector(r.text)
all_address = sel.xpath('//script[contains(.,"point_list")]').re_first(r'point_list = \[(.*)\]\];')

for item in all_address.split(','):
    print(item)

但是您也可以使用xpath表達式直接從頁面獲取該值: //div[h2]/text()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM