Python从Web爬网URL下载数据文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python从Web爬网URL下载数据文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2979字,纯文字阅读大概需要5分钟。
内容图文
![Python从Web爬网URL下载数据文件](/upload/InfoBanner/zyjiaocheng/662/5b4c308209cb44f893916b2bea04e9f7.jpg)
我正在尝试开发一个自动化脚本,以将以下数据文件下载到实用程序服务器,然后进行ETL相关处理.寻找pythonic建议.对urllib,urllib2,漂亮的汤,请求,机械化,硒等之间的此类过程的当前最佳选择不熟悉.
“完全替代每月NPI文件”
文件名(和后续URL)每月更改一次.
到目前为止,这是我目前的方法:
from bs4 import BeautifulSoup
import urllib
import urllib2
soup = BeautifulSoup(urllib2.urlopen('http://nppes.viva-it.com/NPI_Files.html').read())
download_links = []
for link in soup.findAll(href=True):
urls = link.get('href', '/')
download_links.append(urls)
target_url = download_links[2]
urllib.urlretrieve(target_url , "NPI.zip")
我没想到这个笨拙的政府的内容.网站进行更改,因此尽管我只选择了已抓取的网址列表的第三个元素就足够了.当然,如果我的整个方法都做错了,我欢迎进行更正(数据分析是个人的长处).另外,如果我使用的是过时的库,非Python实践或性能低下的选项,我绝对欢迎更新更好的!
解决方法:
通常,requests是获取网页的最简单方法.
如果数据文件的名称遵循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.但是整个方案确实取决于名称的规则性.您可以在正则表达式搜索中添加标志以舍弃字母的大小写,这会使它接受更多.
内容总结
以上是互联网集市为您收集整理的Python从Web爬网URL下载数据文件全部内容,希望文章能够帮你解决Python从Web爬网URL下载数据文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。