基于Python采集136个PHP源码

简介: 基于Python采集136个PHP源码

下载地址:https://pan.baidu.com/s/1jzXlbtnTTOmEe09eRnuecw?pwd=3ayf

提取码:3ayf

参数

page_count = 1  # 每个栏目开始业务content="text/html; charset=gb2312"
    base_url = "https://down.chinaz.com"  # 采集的网址  https://sc.chinaz.com/tag_ppt/zhongguofeng.html
    save_path = "D:\\Freedom\\Sprider\\ChinaZ\\"
    sprider_count = 136# 采集数量
    haved_sprider_count = 0  # 已经采集的数量
    word_content_list = []
    folder_name = ""
    first_column_name = "ppt"
    sprider_start_count=120 #已经采集完成第136个 debug
    max_pager=16 #每页的数量

主体函数:

def sprider(self, title_name="PHP"):
        """
        采集 https://down.chinaz.com/class/572_5_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"
        merchant = int(self.sprider_start_count) // int(self.max_pager) + 1
        second_folder_name = str(self.sprider_count) + "个" + self.folder_name
        self.save_path = self.save_path+ os.sep + "Code" + os.sep +  second_folder_name
        print("开始采集ChinaZCode"+self.folder_name+"...")
        sprider_url = (self.base_url + "/class/{0}_1.htm".format(self.second_column_name))
        #print(sprider_url)
        #sprider_url = (self.base_url + "/" +  self.first_column_name + "/" + second_column_name + ".html")
        response = requests.get(sprider_url, timeout=10, headers=UserAgent().get_random_header(self.base_url))
        response.encoding = 'UTF-8'
        soup = BeautifulSoup(response.text, "html5lib")
        #print(soup)
        div_list =soup.find('div', attrs={"class": 'main'})
        div_list=div_list.find_all('div', attrs={"class": 'item'})
        #print(div_list)
        laster_pager_ul = soup.find('ul', attrs={"class": 'el-pager'})
        laster_pager_li = laster_pager_ul.find_all('li', attrs={"class": 'number'})
        laster_pager_url = laster_pager_li[len(laster_pager_li)-1]
        #<a href="zhongguofeng_89.html"><b>89</b></a>
        page_end_number = int(laster_pager_url.string)
        #print(page_end_number)
        self.page_count = merchant
        while self.page_count <= int(page_end_number):  # 翻完停止
            try:
                if self.page_count == 1:
                    self.sprider_detail(div_list,self.page_count,page_end_number)
                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
                    next_url =self.base_url + "/class/{0}_{1}.htm".format(self.second_column_name,self.page_count )
                    response = requests.get(next_url, timeout=10, headers=UserAgent().get_random_header(self.base_url))
                    response.encoding = 'UTF-8'
                    soup = BeautifulSoup(response.text, "html5lib")
                    div_list = soup.find('div', attrs={"class": 'main'})
                    div_list = div_list.find_all('div', attrs={"class": 'item'})
                    self.sprider_detail(div_list, self.page_count,page_end_number)
                    pass
            except Exception as e:
                print("sprider()执行过程出现错误" + str(e))
                pass
            self.page_count = self.page_count + 1  # 页码增加1
    def sprider_detail(self, element_list, page_count,max_page):
        try:
            element_length = len(element_list)
            self.sprider_start_index = int(self.sprider_start_count) % int(self.max_pager)
            index = self.sprider_start_index
            while index < element_length:
                a=element_list[index]
                if self.haved_sprider_count == self.sprider_count:
                    BaseFrame().debug("采集到达数量采集停止...")
                    break
                index = index + 1
                sprider_info = "正在采集第" + str(page_count) + "页的第" + str(index) + "个资源"
                print(sprider_info)
                #title_image_obj = a.find('img', attrs={"class": 'lazy'})
                url_A_obj=a.find('a', attrs={"class": 'name-text'})
                next_url = self.base_url+url_A_obj.get("href")
                coder_title = url_A_obj.get("title")
                response = requests.get(next_url, timeout=10, headers=UserAgent().get_random_header(self.base_url))
                response.encoding = 'UTF-8'
                soup = BeautifulSoup(response.text, "html5lib")
                #print(soup)
                down_load_file_div = soup.find('div', attrs={"class": 'download-list'})
                if down_load_file_div is None:
                    BaseFrame().debug("应该是多版本的暂时不下载因此跳过哦....")
                    continue
                down_load_file_url =self.base_url+down_load_file_div.find('a').get("href")
                #image_obj = soup.find('img', attrs={"class": "el-image__inner"})
                #image_src =self.base_url+image_obj.get("src")
                #print(image_src)
                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 = "code"
                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 (DownLoad(self.save_path).down_load_file__(down_load_file_url, coder_title, self.folder_name)):
                    #DownLoad(self.save_path).down_cover_image__(image_src, coder_title)  # 资源的 封面
                    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) + "个")
            if (int(page_count) == int(max_page)):
                self.builder_word(self.folder_name, self.save_path, self.word_content_list)
                BaseFrame().debug("文件编写完毕,请到对应的磁盘查看word文件和下载文件!")
        except Exception as e:
            print("sprider_detail:" + str(e))
            pass
    def builder_word(self, word_title, save_path, list_files):
        """
        输出产物是word文件
        :param word_title: 文件的标题
        :param save_path: 文件的保存路径
        :param list_files: 文件集合(单个内容)
        :return:
        """
        try:
            self.copy_file(self.save_path)
            print("Create Word"+word_title)
            file_count= len(list_files)
            self.gen_passandtxt(file_count,word_title)
            document = Document()
            document.add_heading(word_title, level=2)
            document.add_paragraph("分享"+str(file_count)+"个"+str(word_title)+",总有一款适合您\r\n"
                                   "下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。")
            ppt_tieles = ""
            for files in list_files:
                ppt_tieles = ppt_tieles + str(files[0]) + "\r"
            document.add_paragraph(ppt_tieles)
            for files in list_files:
                try:
                    document.add_paragraph(files[0])
                    document.add_picture(files[1], width=Inches(3))
                except Exception as e:
                    pass
            document.add_paragraph("最后送大家一首诗:")
            paragraph = document.add_paragraph()  # 单独控制
            paragraph.add_run("山高路远坑深,\r")
            paragraph.add_run("大军纵横驰奔,\r")
            paragraph.add_run("谁敢横刀立马?\r")
            paragraph.add_run("惟有点赞加关注大军。\r")
            paragraph.bold = True  # 字体加粗
            file_full_path=save_path+os.sep+word_title+".docx"
            document.save(file_full_path)
        except Exception as e:
            print("Create Word Fail reason:" + str(e))
    def gen_passandtxt(self,file_count,word_title):
        print("Create PassWord and Pass.txt")
        message=SpriderTools.gen_password()
        password = "".join(message)
        content=""
        content = content + "\n分享"+str(file_count)+"个"+word_title+",总有一款适合您\r\n"
        content = content + "\n\r"
        content=content+"\n都到这里了您就支持一下呗!谢谢老铁~~"
        content=content+"\n\r"
        content=content+"\n文件我就不一一列举了,送老铁一首打油诗"
        content=content+"\n学习知识费力气,"
        content=content+"\n收集整理更不易。"
        content=content+"\n知识付费甚欢喜,"
        content=content+"\n为咱码农谋福利。"
        content=content+"\n\r"
        content=content+"\n\r"
        content=content+"\n感谢您的支持"
        content=content+"\n\r"
        content=content+"\n-------------------------------------------华丽分割线-------------------------------------------------------"
        content=content+"\n友情提醒解压密码:"+password+""
        full_path=self.save_path+os.sep+""+str(file_count)+"sell_pass.txt"
        with open(full_path, 'a', encoding='utf-8') as f:
            f.write(content)
    def copy_file(self,target_path):
        print("copy files")
        import os
        import shutil
        # src_apk_file_path="薅羊毛专业版.apk"
        # dst_apk_file_path=target_path+os.sep+"薅羊毛专业版.apk"
        # shutil.copyfile(src_apk_file_path, dst_apk_file_path)  # 移动文件
        #
        # src_pdf_file_path = "薅羊毛专业版.pdf"
        # dst_pdf_file_path = target_path + os.sep + "薅羊毛专业版.pdf"
        # shutil.copyfile(src_pdf_file_path, dst_pdf_file_path)  # 移动文件
        src_doc_file_path = "readme.docx"
        dst_doc_file_path = target_path + os.sep + "readme.docx"
        shutil.copyfile(src_doc_file_path, dst_doc_file_path)  # 移动文件
        pass

采集的文件名:

发货100付费下载系统(含APP小程序) v1.1 build20221118

CRMEB 多语言开源商城系统 v4.6.0 bulid20221115

魔众人才招聘系统 v5.2.0

魔众发卡系统 v4.1.0

74cms骑士人才招聘系统源码SE版 v3.16.0

易优双语外贸茶叶网站源码 v1.6.0

易优cms智能家电空调风扇网站源码 v1.6.0

免费红色响应式多语言企业通用模板 v1.0.0

魔众活动报名系统 v6.2.0

易优cms智能仪器教学设备材料网站源码 v1.6.0

easyPay支付SDK扩展包 v3.2.9

219域名PHP离线网络授权系统 v1.9

DM建站系统家电设备维修服务机构网站模板 v1.22

魔众帮助中心管理系统 v4.2.0

php+MySql已有数据表通用搜索可增删改查 v20221111

DouPHP轻量级外贸商城系统 v1.7 Release 20221109

得推闲时优惠系统 v3.2

Joomla内容管理系统 v4.2.5 正式版

CodeIgniter v4.2.10

DM建站系统花园园艺花艺机构网站模板 v1.3

易优鲜果采摘园农家乐网站源码 v1.6.0

易优活性炭净化炭企业网站源码 v1.6.0

魔众商城系统 v6.5.0

随风PHP百度知道问答自动采集(免维护) v22.6

端口在线扫描器 v1.0.1

易优管道疏通房屋补漏网站源码 v1.6.0

易优精密机器机械制造网站源码 v1.6.0

laravel-bjyblog开源博客系统 v17.0.3

魔众视频管理系统 v4.2.0

酷瓜云课堂 v1.6.0

呆错短视频系统 v1.4.5

魔众知识付费系统 v3.1.0

魔众工具箱系统 v3.2.0

DBErp进销存系统 v1.1 RC 221101

leadshop开源商城 v1.4.15

MixPHP v3.0.27

得推家政派单系统 v2.4

HkCms开源内容管理系统 v2.2.3

得推扫码点餐系统 v3.1

迅睿CMS建站系统(基于MIT开源协议) v4.5.7

八亿新闻-门户版(全自动采集发布) v1.2

精仿今日头条新闻网站(实时自动更新文章) v1.2

飞天下载系统FTDMS v3.1.6

得推地方O2O综合门户系统 v6.8

得推跑腿O2O系统 v3.41

得推外卖O2O平台 v5.1

Smarty模板引擎 v4.2.1

Smarty v3.1.47

帮管客CRM客户管理系统 v5.1.0

API代理版自动发卡平台源码 v1.71

战神引擎对接98码支付充值接口 v2.0

MayiCMS蚂蚁分类信息系统单站版 v6.1

wordpress花团养生专家blossom主题整站源码 v1.2

ClassCMS内容管理系统 v3.5

信呼协同办公OA系统 v2.5.0

S-CMS学校建站系统(含APP小程序) v5.0 bulid20220929

萤火商城 v2.0.6 主商城端

YYC松鼠短视频系统 v5.1.2

162100网址导航3号 v9.4.4

魔众SCRM私域运营平台 v3.9.0

wordpress企业外贸网站主题blocksy v1.2

A3Mall开源商城系统 v2.1.4

b2evolution博客系统 v7.2.5

wordpress企业外贸网站主题avril v1.2

呆错网址导航系统 v1.9.8

dmandwp企业站 v2022.9

Kodexplorer可道云 v4.49

乐得同城优惠券系统 v2.3.5

hkcms多语言响应式黄色主题完整源码 v1.0.0

ShopWind多用户商城系统 v3.4.3

网钛IDC云管理代理系统(idcCMS) v1.20

盛筑OA-CRM客户管理系统 v1.0.1

网钛CMS PHP版 v6.62

自适应各终端懒人网址导航源码 v3.9

全民影院 v1.0

ShirneCMS后台管理系统 v1.2.1

swiftadmin框架 v1.1.3

轻博客-有趣的朋友圈 v.1.0.20

汉潮社交电商系统 v2.5

汉潮社区团购系统 v2.5

DooTask开源在线项目任务管理工具 v0.10.5

MoChat企业微信SCRM系统 v1.1.7

NXCRM客户管理系统 v3.2.9

hkcms双语言响应式科技类通用模板 v1.0.0

DiYunCMS(帝云CMS) v4.5.6

得推在线课程系统 v2.0

DSESN社区团购开源商城源码 v3.0.0

Layui开发的简约URL图床 v1.3

网展企业网站系统蓝色风格 v8.0

米酷cms v7.4.4

得推中秋博饼系统 v1.0

YHCMS(英皇CMS影视系统) v1.3.0

简单记JDJ v2.0

Jshop小程序商城 v2.8.0

semcms外贸网站php版 v4.2

一鱼留言本 v2.0

友邻phpB2B电子商务系统 v7.0

CMSimple v5.8

环保节能智能空气净化器类网站模板(带手机版) v1.4.2

PESCMS DOC文档管理系统 v2.0.7

响应式民宿景区旅游类网站模板 v1.4.2

旅游住宿农家乐类网站模板(带手机端) v1.4.2

培训招生教育类网站模板(响应式) v1.4.2

企业管理咨询培训类网站模板(响应式) v1.4.2

农业蔬菜配送食品类网站模板(带手机版) v1.4.2

Fresns社交网络服务软件 v1.6.0

红色大气婚庆婚礼策划公司网站模板(带手机端) v1.4.2

HadSky轻论坛 v7.11.8

绿色水果蔬菜类模板(带手机端) v1.4.2

绿色健美瑜伽美容类网站模板(带手机端) v1.4.2

cqcms红色新闻资讯发布系统(pc+wap) v2.9

响应式园林景观设计公司网站系统 v1.5.8

IPAM IP地址管理系统 v1.5.0

得推人才招聘系统 v2.1

代理记账财务注册公司类模板(带手机版) v1.4.2

响应式黑色展台设计整站模板 v1.4.2

cqcms蓝色通用企业网站源码(带手机端) v2.9

易优CMS陶瓷建材网站源码 v1.5.8

Psky企业网站系统 v1.3

QCMS企业建站系统 v6.0.1

得推物品回收系统 v1.1

Eyoucms品牌咖啡茶饮网站管理系统 v1.5.8

响应式工商联合会总商会类网站模板 v1.4.2


 

最后送大家一首诗:

山高路远坑深,

大军纵横驰奔,

谁敢横刀立马?

惟有点赞加关注大军。

目录
相关文章
|
5月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
5月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
8月前
|
JSON API 数据格式
Python采集京东商品评论API接口示例,json数据返回
下面是一个使用Python采集京东商品评论的完整示例,包括API请求、JSON数据解析
|
6月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
928 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
6月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
6月前
|
机器学习/深度学习 数据采集 算法
基于mediapipe深度学习的运动人体姿态提取系统python源码
本内容介绍了基于Mediapipe的人体姿态提取算法。包含算法运行效果图、软件版本说明、核心代码及详细理论解析。Mediapipe通过预训练模型检测人体关键点,并利用部分亲和场(PAFs)构建姿态骨架,具有模块化架构,支持高效灵活的数据处理流程。
|
6月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
6月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
8月前
|
小程序 安全 关系型数据库
专业打造一款圈子源码软件系统 / 后端 PHP 搭建部署一样实现利益化
本教程详解基于PHP后端与Uni-app的小程序开发全流程,涵盖技术选型、环境搭建、源码导入、接口对接及功能实现。采用Laravel/Symfony框架,结合MySQL/PostgreSQL数据库,使用WebSocket实现实时通信,并集成IM SDK实现音视频聊天。前端使用Uni-app开发,支持跨平台运行。教程包含完整部署流程与安全优化方案,助力快速搭建高性能、安全稳定的小程序系统。
513 5

推荐镜像

更多