Webscraping для извлечения координат из встроенной ссылки Google Map - PullRequest
0 голосов
/ 30 октября 2018
import requests
import urllib2
from bs4 import BeautifulSoup
from pprint import pprint
import pandas as pd
import bs4

url = 'https://www.namus.gov/MissingPersons/Case#/53061'
page = urllib2.urlopen(url)
soup = BeautifulSoup(page, 'html')
#print(soup.prettify())

findall = soup.find_all("a")

for link in findall:
    pprint(link.get("ng-href"))

Когда я запускаю код, я устанавливаю кортеж вместо ссылки. Я пытался ссылаться на href, src, ng-href и не работать. Я могу вытащить подраздел только тогда, когда мне действительно нужна ссылка на Google Maps в виде строки.

#I get this: u'{{subSection.mapLink()}}'
#when I really need this: #"http://www.google.com/maps/place/35.9467011,-84.03260329999999"

Фактическая строка, которую я пытаюсь очистить, выглядит так:

<a ng-if="subSection.mapLink()" class="icon-text-link" ng-href="http://www.google.com/maps/place/35.9467011,-84.03260329999999" target="_blank" href="http://www.google.com/maps/place/35.9467011,-84.03260329999999">
                <i class="icon-location-pin"></i><span>Map</span>
            </a>

1 Ответ

0 голосов
/ 31 октября 2018

Поскольку это угловой веб-сайт, существует много информации, которая загружается динамически с использованием Javascript, вы можете проверить вкладку сети, чтобы узнать, откуда эти данные получены. В данном случае это JSON API со следующим шаблоном:

https://www.namus.gov/api/CaseSets/NamUs/MissingPersons/Cases/{CASE_ID}

Он предоставляет вам всю информацию, встроенную в страницу, URL карты может быть создан динамически, например:

import requests

id = '53061'
resp = requests.get('https://www.namus.gov/api/CaseSets/NamUs/MissingPersons/Cases/{}'.format(id))
body = resp.json()

loc = body['sighting']['publicGeolocation']
coord = loc['coordinates']
print("address         : " + loc['formattedAddress'])
print("google map link : " + "http://www.google.com/maps/place/{},{}".format(coord['lat'],coord['lon']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...