Python分布式通用爬虫(4):处理并统一时间格式

  • 划分.py文件部分
    • 处理并统一时间格式
      • 普通时间转换
        • 代码展示
      • 佛历时间转换
        • 代码展示
      • 缅甸语时间转换
        • 代码展示
      • 其他需要替换月份的时间转换
        • 代码展示
      • 间隔时间转换
        • 代码展示
      • 汉语藏语时间转换
        • 代码展示
      • 月份替换函数
        • 代码展示

如有不同意见或者其他建议,欢迎前来讨论。


划分.py文件部分

该分布式爬虫主要分为五个部分:(1)执行文件(程序的开端)、(2)获取xpath信息、(3)获取所需内容、(4)时间处理、(5)数据入库

我们想要获取某些网站的信息可以通过下载网站内容、复制文字、利用程序获取内容等等方法。现在,我们如果只想要一部分内容,而不是所有的信息,就可以通过程序去获取相应的部分。这个时候我们可以使用的编程语言就有C、C++、JAVA、Python等等。由于Python使用起来比较便捷,我们本次使用的编程语言为Python。我们使用的工具有PyCharm、Oracle11G等等。


处理并统一时间格式

由于不同国家表示的时间都是不一样的,所以我们需要统一一下格式,方便我们对数据进行增删改查。


普通时间转换

在大多数情况下,我们可以直接使用python自带的函数去转换时间格式,将时间转换成datetime格式。


代码展示

下面展示一些 普通时间转换代码片
其中第一个是国际通用时间例:①2021/10/9 ②July 9 2021 ③9 July 2021等等转换,第二个是日期写最前边的时间例:①9/10/2021 ②9-10-2021 ③9.10.2021等等转换。

parse('2021/10/9', fuzzy=True).replace(tzinfo=None)
parse('9/10/2021', fuzzy=True, dayfirst=True).replace(tzinfo=None)

佛历时间转换

在这种情况下,我们不能直接使用python自带的函数去转换时间格式,这个时候就需要对时间进行特殊处理。


代码展示

下面展示一些 佛历时间转换代码片
这里的月份替换在另一个函数里,会在最后展示出来。
由于涉及到很多种不同的写法,所以就分了很多种情况,这样写基本涵盖了所有的佛历书写情况。

def foli_time()each_found = re.findall(r'\d+', str(original_time))year_time = ''if month_time == '':if len(each_found[2]) == 4:year_time = str(int(each_found[2]) - 543)elif len(each_found[2]) == 2:year_time = '20' + str(int(each_found[2]) - 43)month_time = str(each_found[1])each_found[2] = each_found[3]each_found[3] = each_found[4]else:if len(each_found[1]) == 4:year_time = str(int(each_found[2]) - 543)elif len(each_found[1]) == 2:year_time = '20' + str(int(each_found[1]) - 43)if len(each_found) >= 4:com_time = year_time + '-' + month_time + '-' + each_found[0] + ' ' + each_found[2] + ':' +\each_found[3]return_time = datetime.strptime(com_time, "%Y-%m-%d %H:%M")else:com_time = year_time + '-' + month_time + '-' + each_found[0]return_time = datetime.strptime(com_time, "%Y-%m-%d")return return_time

缅甸语时间转换

缅甸语的时间可能连数字都会替换掉,所以我们把缅甸语时间转换也单列出来,将其中的数字替换掉在进行处理。


代码展示

下面展示一些 缅甸语时间转换代码片
这里的月份替换在另一个函数里,会在最后展示出来。

def miandian_time()original_time= str(original_time).replace('၁', '1').replace('၂', '2').replace('၃', '3').replace('၄', '4').replace('၅', '5').replace('၆', '6').replace('၇', '7').replace('၈', '8').replace('၉', '9').replace('၀', '0')each_found = re.findall(r'\d+', original_time)if len(each_found) >= 4:com_time = each_found[1] + '-' + month_time + '-' + each_found[0] + ' ' + each_found[2] + ':' + each_found[3]return_time = datetime.strptime(com_time, "%Y-%m-%d %H:%M")else:com_time = each_found[1] + '-' + month_time + '-' + each_found[0]return_time = datetime.strptime(com_time, "%Y-%m-%d")return return_time

其他需要替换月份的时间转换

有一些其他国家的时间表示可能会将月份换为自己的语言,比如德语、意大利语、高棉语、老挝语等等。


代码展示

下面展示一些 其他需要替换月份的时间转换代码片
这里的月份替换在另一个函数里,会在最后展示出来。

def other_time()each_found = re.findall(r'\d+', original_time)if len(each_found) >= 4:com_time = each_found[1] + '-' + month_time + '-' + each_found[0] + ' ' + each_found[2] + ':' + each_found[3]return_time = datetime.strptime(com_time, "%Y-%m-%d %H:%M")else:com_time = each_found[1] + '-' + month_time + '-' + each_found[0]return_time = datetime.strptime(com_time, "%Y-%m-%d")return return_time

间隔时间转换

除了上述的一些情况外,我们可能会遇到几小时之前、几天之前、昨天、今天等等表示的时间,这样我们就需要另外的一些处理办法。


代码展示

下面展示一些 间隔时间转换代码片

def ago_time(at):if '分钟前' in at:minutes = at[:at.find('分钟前')]return datetime.combine(datetime.now() - timedelta(minutes=int(minutes)), datetime.min.time())elif '分鐘前' in at:minutes = at[:at.find('分鐘前')]return datetime.combine(datetime.now() - timedelta(minutes=int(minutes)), datetime.min.time())elif 'min' in at:minutes = at[:at.find('min')]return datetime.combine(datetime.now() - timedelta(minutes=int(minutes)), datetime.min.time())elif '小时前' in at:hour = at[:at.find('小时前')]return datetime.combine(datetime.now() - timedelta(hours=int(hour)), datetime.min.time())elif '小時前' in at:hour = at[:at.find('小時前')]return datetime.combine(datetime.now() - timedelta(hours=int(hour)), datetime.min.time())elif 'hour' in at:hour = at[:at.find('hour')]return datetime.combine(datetime.now() - timedelta(hours=int(hour)), datetime.min.time())elif 'hr' in at:hour = at[:at.find('hr')]return datetime.combine(datetime.now() - timedelta(hours=int(hour)), datetime.min.time())elif 'today' in at or 'Today' in at or 'TODAY' in at or '今天' in at:return datetime.combine(datetime.now().date(), datetime.min.time())elif 'yesterday' in at or 'Yesterday' in at or 'YESTERDAY' in at or '昨天' in at:return datetime.combine(datetime.now().date() - timedelta(days=1), datetime.min.time())elif '天前' in at:day = at[:at.find('天前')]return datetime.combine(datetime.now() - timedelta(days=int(day)), datetime.min.time())elif 'day' in at:day = at[:at.find('day')]return datetime.combine(datetime.now() - timedelta(days=int(day)), datetime.min.time())elif '周前' in at:week = at[:at.find('周前')]return datetime.combine(datetime.now() - timedelta(weeks=int(week)), datetime.min.time())elif '週前' in at:week = at[:at.find('週前')]return datetime.combine(datetime.now() - timedelta(weeks=int(week)), datetime.min.time())elif 'week' in at:week = at[:at.find('week')]return datetime.combine(datetime.now() - timedelta(weeks=int(week)), datetime.min.time())elif '个月前' in at:month = at[:at.find('个月前')]return datetime.combine(datetime.now() - timedelta(days=int(month) * 30), datetime.min.time())elif '個月前' in at:month = at[:at.find('個月前')]return datetime.combine(datetime.now() - timedelta(days=int(month) * 30), datetime.min.time())elif 'month' in at:month = at[:at.find('month')]return datetime.combine(datetime.now() - timedelta(days=int(month) * 30), datetime.min.time())else:try:return parse(at, fuzzy=True).replace(tzinfo=None)except Exception as e_time:print(e_time)return datetime.combine(datetime.now().date(), datetime.min.time())

汉语藏语时间转换

汉语时间可以直接进行处理,藏语的需要先换一些东西。


代码展示

下面展示一些 汉语藏语时间转换代码片
其中藏语的可能我遇到的太少了,有一定可能性会碰到处理不了的藏语时间。

if re.findall(r'སྤྱི་ཟླ་*. པའི་ཚེས་*.', str(original_time)):original_time = str(original_time).replace('༡', '1').replace('༢', '2').replace('༣', '3').replace('༤', '4').replace('༥', '5').replace('༦', '6').replace('༧', '7').replace('༨', '8').replace('༩', '9').replace('༠', '0')original_time = original_time.replace(r'སྤྱི་ཟླ་', '').replace(r' པའི་ཚེས་', '-').replace(r'  ', ' ').replace(r' ', '-')
if re.findall(r'\d{1,4}-\d{1,2}-\d{1,2}    ཁུངས།', str(original_time)):original_time = ''.join(re.findall(r'\d{1,4}-\d{1,2}-\d{1,2}    ཁུངས།', str(original_time)))
if re.findall(r'སྤེལ་དུས།:\d{1,4}-\d{1,2}-\d{1,2}  རྩོམ་པ་པོ།', str(original_time)):original_time = ''.join(re.findall(r'སྤེལ་དུས།:\d{1,4}-\d{1,2}-\d{1,2}  རྩོམ་པ་པོ།', str(original_time)))
if re.findall(r'\d{1,4}年\d{1,2}月\d{1,2}日\s\d{1,2}:\d{1,2}', str(original_time)):com_time = ''.join(re.findall(r'\d{1,4}年\d{1,2}月\d{1,2}日\s\d{1,2}:\d{1,2}', str(original_time))).replace('年', '-').replace('月', '-').replace('日', '')return_time = datetime.strptime(com_time, "%Y-%m-%d %H:%M")return return_time
elif re.findall(r'\d{1,4}年\d{1,2}月\d{1,2}日\d{1,2}:\d{1,2}', str(original_time)):com_time = ''.join(re.findall(r'\d{1,4}年\d{1,2}月\d{1,2}日\d{1,2}:\d{1,2}', str(original_time))).replace('年', '-').replace('月', '-').replace('日', ' ')return_time = datetime.strptime(com_time, "%Y-%m-%d %H:%M")return return_time
elif re.findall(r'\d{1,4}年\d{1,2}月\d{1,2}日', str(original_time)):com_time = ''.join(re.findall(r'\d{1,4}年\d{1,2}月\d{1,2}日', str(original_time))).replace('年', '-').replace('月', '-').replace('日', '')return_time = datetime.strptime(com_time, "%Y-%m-%d")return return_time
elif re.findall(r'\d{1,4} ཟླ་བ་ \d{1,2} ཚེས \d{1,2}', str(original_time)):com_time = ''.join(re.findall(r'\d{1,4} ཟླ་བ་ \d{1,2} ཚེས \d{1,2}', str(original_time))).replace(' ཟླ་བ་ ', '-').replace(' ཚེས ', '-')return_time = datetime.strptime(com_time, "%Y-%m-%d")return return_time

月份替换函数

有一些其他国家的时间表示可能会将月份换为自己的语言,比如德语、意大利语、高棉语、老挝语等等。这个函数的主要目的就是将这些不同语言的月份转换成可识别的字符串数字。


代码展示

下面展示一些 月份替换函数代码片

def month_time_set(ot):month_time = ''if ("JAN" in ot) or ("Jan" in ot) or ("ม.ค." in ot) or ("มกราคม" in ot) or ("មករា" in ot) or ("ဇန္နဝါရီ၊" in ot) or ("ဇန်နဝါရီ" in ot) or ("ມັງກອນ" in ot) or ("Gennaio" in ot):month_time = '01'elif ("FEB" in ot) or ("Feb" in ot) or ("ก.พ." in ot) or ("กุมภาพันธ์" in ot) or ("កុម្ភៈ" in ot) or ("ေဖေဖာ္၀ါရီ၊" in ot) or ("ဖေဖော်ဝါရီ" in ot) or ("ກຸມພາ" in ot):month_time = '02'elif ("MAR" in ot) or ("Mar" in ot) or ("มี.ค." in ot) or ("มีนาคม" in ot) or ("មីនា" in ot) or ("Mär" in ot) or ("Maerz" in ot) or ("မတ္၊" in ot) or ("မတ်" in ot) or ("ມີນາ" in ot):month_time = '03'elif ("APR" in ot) or ("Apr" in ot) or ("เม.ย." in ot) or ("เมษายน" in ot) or ("មេសា" in ot) or ("ဧၿပီ၊" in ot) or ("ဧပြီ" in ot) or ("ເມສາ" in ot):month_time = '04'elif ("MAY" in ot) or ("May" in ot) or ("พ.ค." in ot) or ("พฤษภาคม" in ot) or ("ឧសភា" in ot) or ("Mai" in ot) or ("ေမ၊" in ot) or ("မေ" in ot) or ("ພຶດສະພາ" in ot) or ("Maggio" in ot):month_time = '05'elif ("JUN" in ot) or ("Jun" in ot) or ("มิ.ย." in ot) or ("มิถุนายน" in ot) or ("មិថុនា" in ot) or ("ဇြန္၊" in ot) or ("ဇွန်" in ot) or ("ມິຖຸນາ" in ot) or ("Giugno" in ot):month_time = '06'elif ("JUL" in ot) or ("Jul" in ot) or ("ก.ค." in ot) or ("กรกฎาคม" in ot) or ("កក្កដា" in ot) or ("ဇူလိုင္၊" in ot) or ("ဇူလိုင်" in ot) or ("ກໍລະກົດ" in ot) or ("Luglio" in ot):month_time = '07'elif ("AUG" in ot) or ("Aug" in ot) or ("ส.ค." in ot) or ("สิงหาคม" in ot) or ("សីហា" in ot) or ("ၾသဂုတ္၊" in ot) or ("ဩဂုတ်" in ot) or ("ြဂုတ်" in ot) or ("ສິງຫາ" in ot) or ("Agosto" in ot):month_time = '08'elif ("SEP" in ot) or ("Sep" in ot) or ("ก.ย." in ot) or ("กันยายน" in ot) or ("កញ្" in ot) or ("စက္တင္ဘာ၊" in ot) or ("စက်တင်ဘာ" in ot) or ("ກັນຍາ" in ot) or ("Settembre" in ot):month_time = '09'elif ("OCT" in ot) or ("Oct" in ot) or ("ต.ค." in ot) or ("ตุลาคม" in ot) or ("តុលា" in ot) or ("Okt" in ot) or ("ေအာက္တိုဘာ၊" in ot) or ("အောက်တိုဘာ" in ot) or ("ຕຸລາ" in ot) or ("Ottobre" in ot):month_time = '10'elif ("NOV" in ot) or ("Nov" in ot) or ("พ.ย." in ot) or ("พฤศจิกายน" in ot) or ("វិច្ឆិកា" in ot) or ("ႏိုဝင္ဘာ၊" in ot) or ("နိုဝင်ဘာ" in ot) or ("ພະຈິກ" in ot):month_time = '11'elif ("DEC" in ot) or ("Dec" in ot) or ("ธ.ค." in ot) or ("ธันวาคม" in ot) or ("ធ្នូ" in ot) or ("Dez" in ot) or ("ဒီဇင္ဘာ၊" in ot) or ("ဒီဇင်ဘာ" in ot) or ("ທັນວາ" in ot) or ("Dicembre" in ot):month_time = '12'return month_time

Python分布式通用爬虫(4)相关推荐

  1. # 手把手教学超详细python通用爬虫分布式框架(一)

    手把手教学超详细python通用爬虫分布式框架(一) ` 这里日后添加系列文章的所有文章的目录 文章目录 手把手教学超详细python通用爬虫分布式框架(一) 前言 一.所谓任务? 二.任务需要什么 ...

  2. Python分布式爬虫打造搜索引擎

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 未来是什么时代?是数据时代!数据分析服务.互联网金融,数据建模.自 ...

  3. python分布式爬虫开题报告范文_基于Python的豆瓣Top250排行榜影片数据爬取和分析开题报告...

    一.选题依据:(简述研究现状,说明该毕业设计的设计目的及意义) 研究现状 Python是一门很全面的语言,又随着大数据和人工智能的兴起,广受爬虫设计者们的青眯.设计者们运用Python语言的框架-Sc ...

  4. Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 https://github.com/mtianyan/Artic ...

  5. python分布式爬虫框架_python之简单Scrapy分布式爬虫的实现

    分布式爬虫:爬虫共用同一个爬虫程序,即把同一个爬虫程序同时部署到多台电脑上运行,这样可以提高爬虫速度. 在默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queu ...

  6. 第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理...

    第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-深度优先与广度优先原理 网站树形结构 深度优先 是从左到右深度进行爬取的,以深度为准则从左到右的执行(递归方式实现)Scrapy默认 ...

  7. 一个自定义python分布式爬虫框架。

    一个分布式爬虫框架.比scrapy简单很多,不需要各种item pipeline middwares spider settings run文件之间来回切换写代码,这只需要一个文件,开发时候可以节约很 ...

  8. Python分布式爬虫-elasticsearch搭建搜索引擎

    Python分布式爬虫-elasticsearch搭建搜索引擎 一.elasticsearch使用 1.elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它 ...

  9. 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查...

    第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...

最新文章

  1. autoware使用rosbag数据生成路径点并进行路径规划(七)
  2. 数论总结 (常用定理+ 模板)
  3. 邮件系统常见错误代码解释 --邮件服务器端(MTA)错误代码解释
  4. 移动端html游戏开发,GitHub - PromeYang/GameBuilder: GameBuilder 是移动端轻量HTML5游戏快速开发框架,主要应用于活动推广。...
  5. golang文件操作:打开关闭文件,带缓冲区的读文件
  6. 子项目依赖和父项目冲突_实战 | maven 轻松重构项目
  7. 电子计算机之父冯.诺依曼的主要贡献,冯•诺依曼的贡献有哪些?
  8. 【邀请函】第十届中国电子政务高峰论坛即将开幕
  9. redux相关学习资源
  10. Android开发笔记(二十三)文件对话框FileDialog
  11. javascript学习一、js的初步了解
  12. matlab图像模糊处理
  13. [AS3.0.1]蓝牙的基本使用,搜索和配对
  14. 利用向量求点到线的最短距离
  15. stellarium
  16. 多年来被互联网深深洗脑
  17. Windows 10免费升级
  18. c语言中的绝对值符号
  19. Codeforces1389 E. Calendar Ambiguity(数论)
  20. 敏感性分析—Sobol

热门文章

  1. 七.Docker网络管理以及固定ip
  2. 利用机器学习分析脑电数据(原理分析+示例代码+快速上手)
  3. 有趣!10个你不得不知的Linux终端游戏
  4. LR字符串截取lr_save_var
  5. 医疗器械软件注册 - 基本概念
  6. FRM P1B4笔记:Valuation and Risk Models
  7. java模拟微信抢红包金额算法规则二倍均值法模拟(满满的注释)
  8. iOS播放器之基于VLCKit的自定义播放器
  9. 网站页面代码优化的方法有哪些呢?
  10. phpstudy不能启动mysql_phpStudy启动后为什么MYSQL无法启动