0 万年历节假日数据爬取

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author:      liing
# @DateTime:    2022-04-01 10:25
# @Description: https://wannianrili.51240.com/
# @Version:     1.0

import csv
import requests
from lxml import etree
import pandas as pd

class WanNianRiLiCrawer(object):
    """
    万年日历接口数据抓取
    Params:year 四位数年份字符串
    """
    def __init__(self, year):
        self.year = year
        data = self.parse_html()
        self.export2csv(data)

    def parse_html(self):
        """页面解析"""
        url = 'https://wannianrili.51240.com/ajax/'
        s = requests.session()
        headers = {
            'Host': 'wannianrili.51240.com',
            'Connection': 'keep-alive',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
            'Accept': '*/*',
            'Sec-Fetch-Site': 'same-origin',
            'Sec-Fetch-Mode': 'cors',
            'Sec-Fetch-Dest': 'empty',
            'Referer': 'https://wannianrili.51240.com/',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
        }
        result = []
        # 生成月份列表
        dateList = [self.year + '-' + '%02d' % i for i in range(1, 13)]
        for year_month in dateList:
            s = requests.session()
            url = 'https://wannianrili.51240.com/ajax/'
            payload = {'q': year_month}
            response = s.get(url, verify=False, params=payload)
            element = etree.HTML(response.text)
            html = element.xpath('//div[@class="wnrl_riqi"]')
            print('In Working:', year_month)
            for _element in html:
                # 获取节点属性
                item = _element.xpath('./a')[0].attrib
                if 'class' in item:
                    if item['class'] == 'wnrl_riqi_xiu' or item['class'] == 'wnrl_riqi_mo':
                        tag = '休假'
                    elif item['class'] == 'wnrl_riqi_ban':
                        tag = '补班'
                    else:
                        pass
                    _span = _element.xpath('.//text()')
                    result.append({'Date': year_month + '-' + _span[0], 'Holiday': _span[1], 'Tag': tag})
                else:
                    _span = _element.xpath('.//text()')
                    result.append({'Date': year_month + '-' + _span[0], 'Holiday': _span[1], 'Tag': '工作'})

        print(result)
        return result

    def export2csv(self, data):
        """导出CSV"""
        headers = ['Date', 'Holiday', 'Tag']
        # 如果存入乱码,添加 encoding='utf-8-sig'
        with open("./"+self.year + 'Holiday.csv', 'w', newline='')as f:
            f_csv = csv.DictWriter(f, headers)
            f_csv.writeheader()
            f_csv.writerows(data)

if __name__ == '__main__':
    """
    生成三年的所需要的假期文件
    """
    WanNianRiLiCrawer('2023')
    WanNianRiLiCrawer('2024')

    holiday_2023 = pd.read_csv("./2023Holiday.csv")
    holiday_2024 = pd.read_csv("./2024Holiday.csv")
    holiday = pd.concat([holiday_2023, holiday_2024])
    holiday.to_csv("./wannianli_holiday.csv", index=False)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值