Как извлечь содержимое таблицы с веб-страницы, используя Python? - PullRequest
3 голосов
/ 02 августа 2020

Мне нужна помощь в извлечении файлов kmz и zip с веб-страницы. Следующий код может извлекать таблицу, но не файлы и ссылки внутри таблицы. Что я могу включить в свой код, чтобы таблица вывода также содержала ссылки и файлы вместо простого текста?

Веб-страница:

https://www.nhc.noaa.gov/gis/

Код:

import pandas as pd
url = 'https://www.nhc.noaa.gov/gis/'
result = pd.read_html(url)[0]
result

Ответы [ 2 ]

4 голосов
/ 02 августа 2020

Я бы сказал, используйте beautifulsoup (bs4) вместо pandas для синтаксического анализа html.

pip install beautifulsoup4 requests

, а затем это так же просто, как

import bs4
import requests

result = bs4.BeautifulSoup(requests.get('https://www.nhc.noaa.gov/gis/').content, features='html.parser')
for link in result.find('table').find_all('a'):
    print(link.attrs['href'])
3 голосов
/ 02 августа 2020

Вы можете использовать beautifulsoup для получения всех ссылок.

from bs4 import BeautifulSoup
import requests
import pandas as pd
url = 'https://www.nhc.noaa.gov/gis/'

res = requests.get(url)
soup = BeautifulSoup(res.text, "html.parser")
table = soup.find("table")
for anchor in table.find_all("a"):
    print("Text - {}, Link - {}".format(anchor.get_text(strip=True), anchor["href"]))

Вывод:

Text - Irma Example, Link - /gis/examples/al112017_5day_020.zip
Text - Cone, Link - /gis/examples/AL112017_020adv_CONE.kmz
Text - Track, Link - /gis/examples/AL112017_020adv_TRACK.kmz
Text - Warnings, Link - /gis/examples/AL112017_020adv_WW.kmz
Text - shp, Link - forecast/archive/al092020_5day_latest.zip
Text - Cone, Link - /storm_graphics/api/AL092020_CONE_latest.kmz
Text - Track, Link - /storm_graphics/api/AL092020_TRACK_latest.kmz
Text - Warnings, Link - /storm_graphics/api/AL092020_WW_latest.kmz

Если вы хотите сохранить фрейм данных, не выполняйте сетевой вызов снова через read_html. Повторно используйте объект ответа.

df = pd.read_html(res.text)

Чтобы получить полную ссылку, добавьте ко всем ссылкам следующее:

https://www.nhc.noaa.gov

Код:

for anchor in table.find_all("a"):
    print("Text - {}, Link - {}".format(anchor.get_text(strip=True), prefix + anchor["href"]))

Вывод:

Text - Irma Example, Link - https://www.nhc.noaa.gov/gis/examples/al112017_5day_020.zip
Text - Cone, Link - https://www.nhc.noaa.gov/gis/examples/AL112017_020adv_CONE.kmz
Text - Track, Link - https://www.nhc.noaa.gov/gis/examples/AL112017_020adv_TRACK.kmz
Text - Warnings, Link - https://www.nhc.noaa.gov/gis/examples/AL112017_020adv_WW.kmz
Text - shp, Link - https://www.nhc.noaa.govforecast/archive/al092020_5day_latest.zip
Text - Cone, Link - https://www.nhc.noaa.gov/storm_graphics/api/AL092020_CONE_latest.kmz
Text - Track, Link - https://www.nhc.noaa.gov/storm_graphics/api/AL092020_TRACK_latest.kmz
Text - Warnings, Link - https://www.nhc.noaa.gov/storm_graphics/api/AL092020_WW_latest.kmz

Чтобы загрузить файлы, снова используйте requests и загрузите файл

...