#!/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)
0 万年历节假日数据爬取
于 2024-03-05 13:46:33 首次发布