[英]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.