В общем, запросы — это самый простой способ получить веб-страницы.
Если имя файла данных соответствует образцу NPPES_Data_Dissemination_<Month>_<year>.zip
, что кажется логичным, вы можете запросить его напрямую;
import requests
url = "http://nppes.viva-it.com/NPPES_Data_Dissemination_{}_{}.zip"
r = requests.get(url.format("March", 2015))
Затем данные находятся в r.text
.
Если имя файла данных менее точно, вы можете получить веб-страницу и использовать регулярное выражение для поиска ссылок на zip
файлов;
In [1]: import requests
In [2]: r = requests.get('http://nppes.viva-it.com/NPI_Files.html')
In [3]: import re
In [4]: re.findall('http.*NPPES.*\.zip', r.text)
Out[4]:
['http://nppes.viva-it.com/NPPES_Data_Dissemination_March_2015.zip',
'http://nppes.viva-it.com/NPPES_Deactivated_NPI_Report_031015.zip',
'http://nppes.viva-it.com/NPPES_Data_Dissemination_030915_031515_Weekly.zip',
'http://nppes.viva-it.com/NPPES_Data_Dissemination_031615_032215_Weekly.zip',
'http://nppes.viva-it.com/NPPES_Data_Dissemination_032315_032915_Weekly.zip',
'http://nppes.viva-it.com/NPPES_Data_Dissemination_033015_040515_Weekly.zip',
'http://nppes.viva-it.com/NPPES_Data_Dissemination_100614_101214_Weekly.zip']
Регулярное выражение в In[4] в основном говорит о поиске строк, начинающихся с «http», содержащих «NPPES» и заканчивающихся на «.zip». Это недостаточно конкретно. Давайте изменим регулярное выражение, как показано ниже;
In [5]: re.findall('http.*NPPES_Data_Dissemination.*\.zip', r.text)
Out[5]:
['http://nppes.viva-it.com/NPPES_Data_Dissemination_March_2015.zip',
'http://nppes.viva-it.com/NPPES_Data_Dissemination_030915_031515_Weekly.zip',
'http://nppes.viva-it.com/NPPES_Data_Dissemination_031615_032215_Weekly.zip',
'http://nppes.viva-it.com/NPPES_Data_Dissemination_032315_032915_Weekly.zip',
'http://nppes.viva-it.com/NPPES_Data_Dissemination_033015_040515_Weekly.zip',
'http://nppes.viva-it.com/NPPES_Data_Dissemination_100614_101214_Weekly.zip']
Это дает нам URL-адреса файла, который мы хотим, а также еженедельные файлы.
In [6]: fileURLS = re.findall('http.*NPPES_Data_Dissemination.*\.zip', r.text)
Давайте отфильтруем еженедельные файлы:
In [7]: [f for f in fileURLS if 'Weekly' not in f]
Out[7]: ['http://nppes.viva-it.com/NPPES_Data_Dissemination_March_2015.zip']
Это URL-адрес, который вы ищете. Но вся эта схема зависит от того, насколько регулярны имена. Вы можете добавить флаги к поиску регулярных выражений, чтобы отбросить регистр букв, что заставит его принимать больше.
person
Roland Smith
schedule
07.04.2015