网页如何集成各社区征文活动

Helllo , 我是小恒
由于我需要腾讯云社区,稀土掘金以及CSDN的征文活动RSS,找了一下没发现,所以使用GET
请求接口对网页定时进行拉取清洗,甚至无意间做了一个简单的json格式API

最终网址:hub.liheng.work
API:http://hub.liheng.work/activities.json
GitHub:https://github.com/lmliheng/hub
在这里插入图片描述

原理

由于浏览器的同源策略产生的跨域问题,使得CSDN官方URL无法被请求获取展示到前端
使用后端代码GET网页代码,对其进行数据清洗,并导入json文件
注意后端程序的定时任务以及日志打印
前端代码调用本地json,也不存在跨域,从而实现需求

代码结构

├───pyproject/
│   ├───activities.json
│   ├───htmlone.py
│   ├───index.html
│   ├───script.log

后端

实现HTML转json的数据清洗,以及打印日志到scripts.log文件

#作者:小恒不会java
#时间:2024年5月13日
#微信:a13551458597
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import json
import logging
from datetime import datetime

logging.basicConfig(filename='script.log', level=logging.INFO)
logging.info('Script started at {}'.format(datetime.now()))

# 获取HTML内容,这种形式是避免get请求的跨域问题
url = 'https://bbs.csdn.net/forums/activity?spm=1035.2022.3001.8781&typeId=745490'
response = requests.get(url)
html_content = response.text

# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, 'html.parser')

activities = []

# 检查做到避免重复活动
posts = soup.find_all('div', {'class': 'content'})
for post in posts:
    activity = {}
    
    # 获取活动名称
    title_element = post.find('div', {'class': 'long-text-title'})
    if title_element:
        activity['name'] = title_element.text.strip()
    
    # 获取活动简介
    desc_element = post.find('div', {'class': 'item-desc'})
    if desc_element:
        activity['description'] = desc_element.text.strip()
    
    # 获取活动链接
    link_element = post.find('a', href=True)
    if link_element:
        activity['link'] = link_element['href']
    
    # 检查活动是否已存在
    if 'link' in activity and not any(existing_activity['link'] == activity['link'] for existing_activity in activities):
        activities.append(activity)

print(activities)

with open('activities.json', 'w', encoding='utf-8') as f:
    json.dump(activities, f, ensure_ascii=False, indent=4)


logging.info('Script finished at {}'.format(datetime.now()))

定时任务

我服务器系统是linux centos7
使用cron完成定时运行,并通过python代码日志打印检验运行情况

检查cron服务是否正在运行:
```shell
sudo systemctl status cron或者ceond

如果cron服务未运行,请使用以下命令启动它:

sudo systemctl start cron

编辑crontab文件

crontab -e

在打开的编辑器中,添加一行以设置定时任务。例如,要每天凌晨1点运行Python脚本,请添加以下行

0 1 * * * /usr/bin/python /path/to/your/script.py

列出当前用户的crontab条目:

crontab -l

日志打印检查

scripts.log

[root@iZ7xvavc793m36sybr4bw4Z hub.liheng.work]# cat scripts.log
INFO:root:Script started at 2024-05-13 21:11:36.571745
INFO:root:Script finished at 2024-05-13 21:11:37.311995
[root@iZ7xvavc793m36sybr4bw4Z hub.liheng.work]# 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-14 06:54:15       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-14 06:54:15       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-14 06:54:15       82 阅读
  4. Python语言-面向对象

    2024-05-14 06:54:15       91 阅读

热门阅读

  1. 宽电压降压型 DC-DC 电源管理芯片

    2024-05-14 06:54:15       25 阅读
  2. nginx 负载均衡配置详解

    2024-05-14 06:54:15       34 阅读
  3. submitUpload() { this.$refs.upload.submit(); },

    2024-05-14 06:54:15       20 阅读
  4. 前端安全:XSS攻击与防御策略

    2024-05-14 06:54:15       35 阅读
  5. 数据赋能(87)——数据要素:管理原则与原理

    2024-05-14 06:54:15       30 阅读
  6. 1、工厂模式

    2024-05-14 06:54:15       27 阅读
  7. Spring生命周期深度解析

    2024-05-14 06:54:15       30 阅读
  8. 《卡巴拉数字密码》PDF完整版

    2024-05-14 06:54:15       26 阅读
  9. 【spring】加载外部的配置文件

    2024-05-14 06:54:15       26 阅读
  10. 机器学习 - 不同分类模型的比较

    2024-05-14 06:54:15       27 阅读