当前位置: 首页 > news >正文

python 获取网页内容新增网页分类+删除指定后缀数组元素功能(基于python 3.6)...

from urllib.parse import urljoin
import urllib.request

from bs4 import BeautifulSoup
import time
import os
import re
import errno


def mkdir_p(path): # 递归创建多级目录
try:
os.makedirs(path)
except OSError as exc: # Python >2.5 (except OSError, exc: for Python <2.5)
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else:
raise


def get_link(page): # 寻找链接的href
linkData = []
for page in page.find_all('td'):
links = page.select("a")
for each in links:
# if str(each.get('href'))[:1] == '/': 过滤if代码
data = each.get('href')
linkData.append(data)
return (linkData)


def gain(url): # 获取网页指定内容
try:
page = urllib.request.urlopen(url).read()
soup = BeautifulSoup(page, 'lxml') # 利用soup获取网页内容
links = get_link(soup) # 获取<a href= ? 内容
return links
except:
print('无法获取该链接:' + url)
return 1




def main():
url = 'http://weather.unisys.com/hurricane/index.php'
Download_dir = 'E:\\Typhoon_data\\Data' #download path
Web_Link = gain(url)

for Link in range(len(Web_Link)):
Link_Add = Web_Link[Link]
Link_One = re.split("/", Link_Add) # 去除'/',将Link_Add变成数组
Ocean_Folder = Link_One[0] # 获取数组第1位值
Ocean_Time = Link_One[1] # 获取数组第2位值
url_Typhoon = 'http://weather.unisys.com/hurricane/'
_connet = urljoin(url_Typhoon, Link_Add)
Web_Link_ = gain(_connet)

# 删除多余gif链接
Gifdata = []
for Gif in range(len(Web_Link_)):
Gifdata_ = Web_Link_[Gif]
findGif = re.findall(r'.gif$', Gifdata_, re.I)
if findGif:
Gifdata.append(Gifdata_)
# print(Gifdata)
else:
continue
for _Gif in range(len(Gifdata)):
Web_Link_.remove(Gifdata[_Gif])

time.sleep(3)
if Ocean_Time != 'index.php':
for Link_A in range(len(Web_Link_)):
Link_Add_ = Web_Link_[Link_A]
Link_part = re.split("/", Link_Add_) # 去除'/',将Link_Add变成数组
Ocean_dataName = Link_part[0] # 获取dataName
url_Data = 'http://weather.unisys.com/hurricane/' + Ocean_Folder + "/" + Ocean_Time + "/"
connet_ = urljoin(url_Data, Link_Add_)

time.sleep(1)
# 下载数据
Ocean_dataFile = (Ocean_dataName + '.json')
file = os.path.join(Download_dir + "/" + Ocean_Folder + "/" + Ocean_Time + "/") # 拼接绝对路径
mkdir_p(file)
print(connet_)
if os.path.isfile(file + Ocean_dataFile):
print('文件已存在')
else:
try:
url =connet_
wp = urllib.request.urlopen(url) # 打开数据网页数据
content = wp.read()

fp = open(file + Ocean_dataFile, "wb") # 写入指定文件夹
fp.write(content) # 写入数据
fp.close() # 关闭文件
except:
print('无法获取该链接:' + url)
continue





else:
for Link_B in range(len(Web_Link_)):
_Link_Add = Web_Link_[Link_B]
Link_part_ = re.split("/", _Link_Add) # 去除'/',将Link_Add变成数组
Ocean_Time_ = Link_part_[1] # 获取数组第2位值,年份
url_Typhoon_ = 'http://weather.unisys.com/hurricane/' + Ocean_Folder + "/"
Connet = urljoin(url_Typhoon_, _Link_Add)
_Web_Link = gain(Connet)
time.sleep(3)

# 删除多余gif链接
_Gifdata = []
for _Gif_ in range(len(_Web_Link)):
_Gifdata_ = _Web_Link[_Gif_]
findGif = re.findall(r'.gif$', _Gifdata_, re.I)
if findGif:
_Gifdata.append(_Gifdata_)
# print(Gifdata)
else:
continue
for _Gif in range(len(_Gifdata)):
_Web_Link.remove(_Gifdata[_Gif])

for Link_B_ in range(len(_Web_Link)):
_Link_Add_ = Web_Link[Link_B_]
_Link_part_= re.split("/", _Link_Add_) # 去除'/',将Link_Add变成数组
_Ocean_dataName_ = _Link_part_[0] # 获取数组第1位值
url_Data_ = 'http://weather.unisys.com/hurricane/' + Ocean_Folder + "/" + Ocean_Time_ + "/"
Connet_ = urljoin(url_Data_, _Link_Add_)
time.sleep(1)
# 下载数据

Ocean_dataName = (_Ocean_dataName_ + '.json')
file = os.path.join(Download_dir + "/" + Ocean_Folder + "/" + Ocean_Time_ + "/" ) # 拼接绝对路径
mkdir_p(file)
print(Connet_)
if os.path.isfile(file + Ocean_dataName):
print('文件已存在')
else:
try:
url = Connet_
wp = urllib.request.urlopen(url) # 打开数据网页数据
content = wp.read()
fp = open(file + Ocean_dataName
, "wb") # 写入指定文件夹
fp.write(content) # 写入数据
fp.close() # 关闭文件
except:
print('无法获取该链接:' + url)
continue

if __name__ == '__main__':
main()
 


转载于:https://www.cnblogs.com/setname/p/8556977.html

相关文章:

  • 我是她的奇迹
  • 解决 Boost安装:fatal error: bzlib.h: No such file or directory 问题
  • 李益:展览工程“绿色供应链”解决之道
  • 当然我在扯淡
  • 另类起床提示 模仿iPod的数字时钟
  • 《2017年人工智能行业发展研究报告白皮书》发布 以数洞见行业未来
  • 【315打假】去信任的区块链技术 难以阻止的失信项目
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • iOS 实现语音边录边传
  • chrome离线包出现的小问题
  • Linux运维学习笔记-定时任务知识总结
  • 购物车程序练习
  • 使用Promise链式调用解决多个异步回调的问题
  • JetBrains发布Kotlin 1.2.30
  • MySQL和Java数据类型对应
  • CSS居中完全指南——构建CSS居中决策树
  • es6(二):字符串的扩展
  • FineReport中如何实现自动滚屏效果
  • GraphQL学习过程应该是这样的
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript设计模式之工厂模式
  • JavaScript学习总结——原型
  • Java小白进阶笔记(3)-初级面向对象
  • Mybatis初体验
  • MYSQL 的 IF 函数
  • PHP面试之三:MySQL数据库
  • redis学习笔记(三):列表、集合、有序集合
  • SpingCloudBus整合RabbitMQ
  • 大快搜索数据爬虫技术实例安装教学篇
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 第十八天-企业应用架构模式-基本模式
  • 飞驰在Mesos的涡轮引擎上
  • 后端_MYSQL
  • 回流、重绘及其优化
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 我的业余项目总结
  • 消息队列系列二(IOT中消息队列的应用)
  • 写给高年级小学生看的《Bash 指南》
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • postgresql行列转换函数
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (3)选择元素——(17)练习(Exercises)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (全注解开发)学习Spring-MVC的第三天
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (十一)手动添加用户和文件的特殊权限
  • (转)详解PHP处理密码的几种方式
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net Web项目创建比较不错的参考文章