分享36个C源码,总有一款适合您

news2024/11/27 20:24:25

C源码

分享36个C源码,总有一款适合您

下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。

源码下载链接:https://pan.baidu.com/s/1WTLgtQ2J5gfZdj-LMEYnEA?pwd=nimr 
提取码:nimr

 

import os
import shutil
import time
from time import sleep

import requests
from bs4 import BeautifulSoup
from docx import Document
from docx.shared import Inches

from framework.base.BaseFrame import BaseFrame
from sprider.business.DownLoad import DownLoad
from sprider.business.SeleniumTools import SeleniumTools
from sprider.business.SpriderTools import SpriderTools

from selenium import webdriver
from selenium.webdriver.common.by import By
from sprider.model.SpriderEntity import SpriderEntity
from sprider.access.SpriderAccess import SpriderAccess


class HuaJunCode:
    base_url =  "https://down.chinaz.com" # 采集的网址
    save_path = "D:\\Freedom\\Sprider\\ChinaZ\\"
    sprider_count = 111  # 采集数量
    sprider_start_count=100# 正在采集第51页的第7个资源,共60页资源 debug



    word_content_list = []
    folder_name = ""
    page_end_number=0
    max_pager=15 #每页的数量
    haved_sprider_count =0  # 已经采集的数量
    page_count = 1  # 每个栏目开始业务content="text/html; charset=gb2312"
    filter_down_file=[]

    def __init__(self):
        pass

    def sprider(self,title_name="NET"):

        """
       采集
       PHP https://down.chinaz.com/class/572_5_1.htm
       NET https://down.chinaz.com/class/572_4_1.htm
       ASP https://down.chinaz.com/class/572_3_1.htm
       Python https://down.chinaz.com/class/604_572_1.htm
            https://down.chinaz.com/class/608_572_1.htm
        微信 https://down.chinaz.com/class/610_572_1.htm
       Ruby   https://down.chinaz.com/class/622_572_1.htm
       NodeJs https://down.chinaz.com/class/626_572_1.htm
       C https://down.chinaz.com/class/594_572_1.htm
       :return:
       """
        if title_name == "PHP":
            self.folder_name = "PHP源码"
            self.second_column_name = "572_5"
        elif title_name == "Go":
            self.folder_name = "Go源码"
            self.second_column_name = "606_572"
        elif title_name == "NET":
            self.folder_name = "NET源码"
            self.second_column_name = "572_4"
        elif title_name == "ASP":
            self.folder_name = "ASP源码"
            self.second_column_name = "572_3"
        elif title_name == "Python":
            self.folder_name = "Python源码"
            self.second_column_name = "604_572"
        elif title_name == "JavaScript":
            self.folder_name = "JavaScript源码"
            self.second_column_name = "602_572"
        elif title_name == "Java":
            self.folder_name = "Java源码"
            self.second_column_name = "572_517"
        elif title_name == "HTML":
            self.folder_name = "HTML-CSS源码"
            self.second_column_name = "608_572"
        elif title_name == "TypeScript":
            self.folder_name = "TypeScript源码"
            self.second_column_name = "772_572"
        elif title_name == "微信小程序":
            self.folder_name = "微信小程序源码"
            self.second_column_name = "610_572"
        elif title_name == "Ruby":
            self.folder_name = "Ruby源码"
            self.second_column_name = "622_572"
        elif title_name == "NodeJs":
            self.folder_name = "NodeJs源码"
            self.second_column_name = "626_572"
        elif title_name == "C++":
            self.folder_name = "C++源码"
            self.second_column_name = "596_572"
        elif title_name == "C":
            self.folder_name = "C源码"
            self.second_column_name = "594_572"
        #https://down.chinaz.com/class/594_572_1.htm


        first_column_name = title_name # 一级目录
        second_folder_name = str(self.sprider_count) + "个" + self.folder_name #二级目录
        self.sprider_type =second_folder_name
        self.merchant=int(self.sprider_start_count) //int(self.max_pager)+1 #起始页码用于效率采集
        self.file_path = self.save_path + os.sep + "Code" + os.sep + first_column_name + os.sep + second_folder_name
        self.save_path = self.save_path+ os.sep + "Code" + os.sep+first_column_name+os.sep + second_folder_name+ os.sep + self.folder_name
        BaseFrame().debug("开始采集ChinaZCode"+self.folder_name+"...")
        sprider_url = (self.base_url + "/class/{0}_1.htm".format(self.second_column_name))
        down_path="D:\\Freedom\\Sprider\\ChinaZ\\Code\\"+first_column_name+"\\"+second_folder_name+"\\Temp\\"
        if os.path.exists(down_path) is True:
            shutil.rmtree(down_path)
        if os.path.exists(down_path) is False:
            os.makedirs(down_path)

        if os.path.exists(self.save_path ) is True:
            shutil.rmtree(self.save_path )
        if os.path.exists(self.save_path ) is False:
            os.makedirs(self.save_path )
        chrome_options = webdriver.ChromeOptions()
        diy_prefs ={'profile.default_content_settings.popups': 0,
                    'download.default_directory':'{0}'.format(down_path)}
        # 添加路径到selenium配置中
        chrome_options.add_experimental_option('prefs', diy_prefs)
        chrome_options.add_argument('--headless') #隐藏浏览器

        # 实例化chrome浏览器时,关联忽略证书错误
        driver = webdriver.Chrome(options=chrome_options)
        driver.set_window_size(1280, 800)  # 分辨率 1280*800

        # driver.get方法将定位在给定的URL的网页,get接受url可以是任何网址,此处以百度为例
        driver.get(sprider_url)
        # content = driver.page_source
        # print(content)
        div_elem = driver.find_element(By.CLASS_NAME, "main")  # 列表页面 核心内容
        element_list = div_elem.find_elements(By.CLASS_NAME, 'item')

        laster_pager_ul = driver.find_element(By.CLASS_NAME, "el-pager")
        laster_pager_li =laster_pager_ul.find_elements(By.CLASS_NAME, 'number')
        laster_pager_url = laster_pager_li[len(laster_pager_li) - 1]
        page_end_number = int(laster_pager_url.text)
        self.page_count=self.merchant
        while self.page_count <= int(page_end_number):  # 翻完停止
            try:
                if self.page_count == 1:
                    self.sprider_detail(driver,element_list,self.page_count,page_end_number,down_path)
                    pass
                else:
                    if self.haved_sprider_count == self.sprider_count:
                        BaseFrame().debug("采集到达数量采集停止...")
                        BaseFrame().debug("开始写文章...")
                        self.builder_word(self.folder_name, self.save_path, self.word_content_list)
                        BaseFrame().debug("文件编写完毕,请到对应的磁盘查看word文件和下载文件!")
                        break
                    #(self.base_url + "/sort/{0}/{1}/".format(url_index, self.page_count))
                    #http://soft.onlinedown.net/sort/177/2/

                    next_url = self.base_url + "/class/{0}_{1}.htm".format(self.second_column_name, self.page_count)
                    driver.get(next_url)

                    div_elem = driver.find_element(By.CLASS_NAME, "main")  # 列表页面 核心内容
                    element_list = div_elem.find_elements(By.CLASS_NAME, 'item')
                    self.sprider_detail( driver, element_list, self.page_count, page_end_number, down_path)
                    pass
                #print(self.page_count)
                self.page_count = self.page_count + 1  # 页码增加1
            except Exception as e:
                print("sprider()执行过程出现错误:" + str(e))
                sleep(1)



    def sprider_detail(self, driver,element_list,page_count,max_page,down_path):
        """
        采集明细页面
        :param driver:
        :param element_list:
        :param page_count:
        :param max_page:
        :param down_path:
        :return:
        """
        index = 0
        element_array=[]
        element_length=len(element_list)
        for element in element_list:
            url_A_obj = element.find_element(By.CLASS_NAME,  'name-text')
            next_url = url_A_obj.get_attribute("href")
            coder_title = url_A_obj.get_attribute("title")
            e=coder_title+"$"+ next_url
            element_array.append(e)
            pass
        if int(self.page_count) == int(self.merchant):
            self.sprider_start_index = int(self.sprider_start_count) % int(self.max_pager)
            index=self.sprider_start_index
        while index < element_length:


            if os.path.exists(down_path) is False:
                os.makedirs(down_path)

            if self.haved_sprider_count == self.sprider_count:
                BaseFrame().debug("采集到达数量采集停止...")
                break

            #element = element_list[index]
            element=element_array[index]
            time.sleep(1)

            index = index + 1
            sprider_info="正在采集第"+str(page_count)+"页的第"+str(index)+"个资源,共"+str(max_page)+"页资源"
            BaseFrame().debug(sprider_info)
            next_url=element.split("$")[1]
            coder_title=element.split("$")[0]
            # next_url = element.find_element(By.TAG_NAME, 'a').get_attribute("href")
            # coder_title =element.find_element(By.TAG_NAME, 'img').get_attribute("title")
            driver.get(next_url) # 请求明细页面
            try:
                # codeEntity = SpriderEntity()  # 下载过的资源不再下载
                # codeEntity.sprider_base_url = self.base_url
                # codeEntity.create_datetime = SpriderTools.get_current_datetime()
                # codeEntity.sprider_url = next_url
                # codeEntity.sprider_pic_title = coder_title
                # codeEntity.sprider_pic_index = str(index)
                # codeEntity.sprider_pager_index = page_count
                # codeEntity.sprider_type = self.sprider_type
                # if SpriderAccess().query_sprider_entity_by_urlandindex(next_url, str(index)) is None:
                #     SpriderAccess().save_sprider(codeEntity)
                # else:
                #     BaseFrame().debug(coder_title+next_url + "数据采集过因此跳过")
                #     continue

                if SeleniumTools.judeg_element_isexist(driver, "CLASS_NAME", "download-item") == 3:
                    driver.back()
                    BaseFrame().debug(coder_title+"不存在源码是soft因此跳过哦....")
                    continue
                print("准备点击下载按钮...")
                driver.find_element(By.CLASS_NAME, "download-item").click() #下载源码
                sleep(1)
                result,message=SpriderTools.judge_file_exist(True,240,1,down_path,"zip|rar|gz|tgz")#判断源码
                if result is True:

                    sprider_content = [coder_title, self.save_path + os.sep +"image"+ os.sep + coder_title + ".jpg"]  # 采集成功的记录
                    self.word_content_list.append(sprider_content)  # 增加到最终的数组
                    self.haved_sprider_count = self.haved_sprider_count + 1
                    BaseFrame().debug("已经采集完成第" + str(self.haved_sprider_count) + "个")
                    time.sleep(1)
                    driver.back()

                    coder_title = str(coder_title).replace("/", "") #去掉windows不识别的字符
                    files = os.listdir(down_path)
                    file_name = files[0] #获取默认值
                    if len(self.filter_down_file)>0:
                        for file in files:
                            for filter_file in self.filter_down_file:
                                if str(file) in str(filter_file):
                                    BaseFrame().error(filter_file + "文件被过滤...")
                                    pass
                                else:
                                    file_name = file

                    srcFile = down_path + os.sep + file_name
                    file_ext = os.path.splitext(srcFile)[-1]

                    dstFile = down_path + os.sep + coder_title + file_ext
                    os.rename(srcFile, dstFile)
                    srcFile = dstFile
                    dstFile = self.save_path + os.sep + coder_title + file_ext

                    shutil.move(srcFile, dstFile)  # 移动文件

                else:
                    files = os.listdir(down_path)  # 读取目录下所有文件
                    coder_title = str(coder_title).replace("/", "")  # 去掉windows不识别的字符
                    try:
                        if str(message)=="0个文件认定是False":
                            BaseFrame().error(coder_title+"文件不存在...")
                            shutil.rmtree(down_path)  # 如果没下载完是无法删除的
                            pass
                        else:
                            BaseFrame().error("检测下载文件出错可能原因是等待时间不够已经超时,再等待60秒...")
                            time.sleep(60)
                            shutil.rmtree(down_path) #如果没下载完是无法删除的
                            #清空数组
                            self.filter_down_file.clear()
                    except Exception as e:
                        # 使用数组append记录文件名字 移动的时候过滤
                        self.builder_filter_file(files)
                    pass
            except Exception as e:
                BaseFrame().error("sprider_detail()执行过程出现错误:" + str(e))
                BaseFrame().error("sprider_detail()记录下载的文件名")
                # 使用数组append记录文件名字 移动的时候过滤
                files = os.listdir(down_path)  # 读取目录下所有文件
                self.builder_filter_file(files)

        if(int(page_count)==int(max_page)):
            self.builder_word(self.folder_name,self.save_path,self.word_content_list)
            BaseFrame().debug("文件编写完毕,请到对应的磁盘查看word文件和下载文件!")

Advanced Web Statistics(AWStats) v7.1

Cetus MySQL数据库中间件 v2.3.9

clumsy网络环境模拟工具 v0.3 rc4 源码包

dnnmmp开发环境 v1.4.0

EasyFlash嵌入式Flash存储器库 v4.1.0

FlashDB超轻量级数据库 v1.1.2

Freeside v2.3.0

Friso中文分词器 v1.6.4

Gear-Lib通用的C基础库 v1.1.21

HarmonyOS华为鸿蒙系统 v1.1.4 LTS版本

HarmonyOS华为鸿蒙系统 v2.0 Canary

hetao Web 服务器软件 v0.9.0

htop交互式进程查看器 v3.2.1

ip2region地址定位库 v2.11.0

IP地址数据库 v1.0

iSulad容器解决方案 v2.1.0

LCUI 图形界面开发库 v2.2.0

libhv跨平台网络库 v1.3.0

LuatOS实时操作系统 v0007

Markdown编辑器MacDown v0.6

Movable Type 博客平台 v4.38

Netdata性能实时监测工具 v1.37.1

obs-studio实时流媒体和屏幕录制软件 v28.1.2

OSPod.CMS专业建站平台 v3.0.2

PHP7框架Phalcon7 v1.2.3

rtty终端管理工具 v8.1.0

SeasLog v2.2.0

starrtc-server免费IM系统 v1.0

TBOX跨平台开发库 v1.7.2

tengine淘宝Web服务器 v2.3.4

Ventoy创建可启动U盘的工具 v1.0.86 源码包

Wireshark网络流量分析器 v4.0.2

xlswriter v1.5.2

双鱼林vb图书信息管理demo系统 v1.0

多功能信息管理 v3.0 共享版 v3.0 共享版

雷傲极酷超级论坛LeoBBS X Build 090206  简体正式版

最后送大家一首诗:

山高路远坑深,
大军纵横驰奔,
谁敢横刀立马?
惟有点赞加关注大军。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Swagger使用

SpringBoot继承Swagger <!--swagger依赖--> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version> </dependency> <!--swagger ui--> <dependen…

列表元素的查找,插入和删除

1&#xff0c;查找列表元素&#xff1a; 语法格式&#xff1a;ls.index(x) 其中&#xff0c;ls是要进行元素查找操作对象&#xff0c;x为要查元素值&#xff0c;返回值是ls中第一个值为x的元素的位置。例如&#xff1a;ls[1,2,3,6]#创建一个列表 print&#xff08;ls值为6的元…

Linux操作系统进程状态Linux内核进程状态

目录 Linux操作系统进程状态 1. 新建 2. 运行 3. 阻塞 4. 挂起 Linux内核进程状态 进程状态查看 Linux操作系统进程状态 1. 新建 即字面意思&#xff0c;将进程资源(PCB)加载到内存,运行状态之前就是新建。 2. 运行 进程正在运行或者task_struct 结构体在队列中排队&…

leetcode 1813. 句子相似性 III【python3双指针的实现思路及过程整理】

题目 一个句子是由一些单词与它们之间的单个空格组成&#xff0c;且句子的开头和结尾没有多余空格。比方说&#xff0c;“Hello World”&#xff0c;“HELLO”&#xff0c;"hello world hello world"都是句子。每个单词都只包含大写和小写英文字母。 如果两个句子 s…

【数据结构】图的案例引入及类型定义

6.2 案例引入 六度空间理论 六度空间理论验证 6.3 图的类型定义 图的抽象数据类型定义如下 ADT Graph {数据对象V&#xff1a;具有相同特性的数据元素的集合&#xff0c;称为顶点集。数据关系R&#xff1a;R{VR}VR{<v,w>|<v,w>|v,w∈V ^ p(v,w),<v,w>表述…

WebStorage之浏览器的本地存储(结合案例)

目录前言一&#xff0c;WebStorage二&#xff0c;localStorage2.1 存储2.2 读取2.3 删除2.4 清除全部2.5 代码三&#xff0c;sessionStorage3.1 用法3.2 区别3.3 代码四&#xff0c;结合案例后记前言 浏览器的本地存储可以缓存一些信息在浏览器中&#xff0c;方便取用。在学习…

Docker(黑马spring cloud笔记)

Docker 目录Docker一、介绍和安装1. 安装2. 启动3. 镜像加速二、Docker基本操作1. 镜像操作2. 容器操作3. 数据卷操作三、Dockerfile1. 镜像结构2. Dockerfile四、Docker-Compose1. 安装2. 基本命令五、Docker私服搭建六、练习练习1&#xff1a;save和load练习2&#xff1a;doc…

【MySQL】深入学习B+索引的使用

文章目录1. 前言2. 索引的代价2.1 空间上的代价2.2 时间上的代价3. B树索引的使用3.1 提取正确的扫描区间3.1.1 所有搜索条件都可以生成合适的扫描区间的情况3.1.2 有的搜索搜索条件不能生成合适的扫描区间3.1.3 从复杂的搜索条件中找出扫描区间3.1.4 使用联合索引执行查询时对…

5. 统计学基础2:协方差、相关系数、协方差矩阵

文章目录1. 协方差2. 相关系数【就是使 |协方差|<1】3. 协方差矩阵1. 协方差 标准差和方差一般是用来描述一维数据的&#xff0c; 具体介绍见&#xff1a;5. 统计学基础1&#xff1a;平均值…四分位数、方差、标准差&#xff08;均方差&#xff09;、标准误&#xff08;标准…

ModelMapper 一文读懂

目录 1、ModelMapper简介 1.1 引入ModelMapper 的依赖 1.2 进行Mapping映射 1.3 ModelMapper 工作原理 2、ModelMapper 基础操作 2.1 ModelMapper 基本映射 2.2 ModelMapper 集合转换 2.3 ModelMapper 指定默认值 2.4 ModelMapper 属性值转换 2.5 ModelMapper 属…

node.js创建服务器及知识点

node.js创建服务器及知识点用http协议创建web服务器http协议知识点用express创建web服务器express中路由知识点fs文件系统模块文件流querystring查询字符串模块URL模块中间件挂载路由器node.js和mysql项目实战知识点完整代码注意点用http协议创建web服务器 //引入http const h…

【强训】Day07

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、选择二、编程1. Fibonacci数列2. 合法括号序列判断 ☆答案1. 选择2. 编程普通小孩也要热爱生活&#xff01; 一、选择 Math.round(11.5) 等于&#xff08;&#xff09; A 11 B 11.5 C 12 D 12.5 以下对继承的描…

Spring Boot(五十四):SpringBoot事件监听机制

1 Java监听机制 SpringBoot 的监听机制&#xff0c;其实是对Java提供的事件监听机制的封装。 Java中的事件监听机制定义了以下几个角色&#xff1a; 事件&#xff1a;Event&#xff0c;继承 java.util.EventObject 类的对象事件源&#xff1a;Source &#xff0c;任意对象Ob…

Unet网络解析

1 Unet网络概述 论文名称&#xff1a;U-Net: Convolutional Networks for Biomedical Image Segmentation 发表会议及时间 &#xff1a;MICCA ( 国际医学图像计算和 计算机辅 助干预会 议 ) 2 0 1 5 Unet提出的初衷是为了解决医学图像分割的问题。 Unet网络非常的简单&…

leetcode 2246. Longest Path With Different Adjacent Characters(不同相邻字母的最长路径)

给一棵以节点0为根的树&#xff08;不一定是二叉树&#xff09;&#xff0c;共有n个节点&#xff0c;0&#xff5e;n-1&#xff0c; 同样的&#xff0c;有长度为n的数组parent, parent[i]表示第 i 个节点的parent, 0的parent是-1. 长度为n的字符串&#xff0c;s(i)表示第i个节点…

JSPmvc

一、JSP 概述 JSP&#xff08;全称&#xff1a;Java Server Pages&#xff09;&#xff1a;Java 服务端页面。是一种动态的网页技术&#xff0c;其中既可以定义HTML、JS、CSS等静态内 容&#xff0c;还可以定义 Java代码的动态内容&#xff0c;也就是 JSP HTML Java 。如下就…

【金融】新成立基金建仓时点、行业分布与市场行情关系探究

需要进一步交流&#xff0c;获取数据和代码的同学欢迎私信奥~基于新成立基金建仓带入市场的巨量资金会推动市场行情这一逻辑&#xff0c;开展了一系列研究。首先提出了通过基金净值识别建仓行为&#xff08;累计绝对值涨跌幅法&#xff09;和通过基金β值识别建仓行为&#xff…

Vue知识系列-VS Code的安装+Vue环境的搭建+Vue指令

一、VS Code下载地址 Visual Studio Code - Code Editing. Redefined 二、VS Code初始化设置 1.安装插件 在安装好的VSCode软件的扩展菜单中查找安装如下4个插件 2、创建项目 vscode本身没有新建项目的选项&#xff0c;所以要先创建一个空的文件夹&#xff0c;如project_xx…

自主异常检测算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

AppScan 扫描web应用程序

系列文章 AppScan介绍和安装 第二节-AppScan 扫描web应用程序 1.环境布置 我们准备了如下一个靶场用来做实验 2.扫描步骤 1.启动AppScan 2.选择 【扫描web应用程序】 3.输入起始URL&#xff0c;点击【下一步】 http://127.0.0.1:83/4.选择【不使用代理】,点击【下一…