基于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


 

最后送大家一首诗:

山高路远坑深,

大军纵横驰奔,

谁敢横刀立马?

惟有点赞加关注大军。

目录
相关文章
|
25天前
|
人工智能 机器人 测试技术
【python】python小游戏——开心消消乐(源码)【独一无二】
【python】python小游戏——开心消消乐(源码)【独一无二】
|
25天前
|
存储 人工智能 搜索推荐
【python】python用户管理系统[简易版](源码+报告)【独一无二】
【python】python用户管理系统[简易版](源码+报告)【独一无二】
|
25天前
|
存储 数据挖掘 数据库
【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】
【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】
|
1月前
|
数据采集 JSON API
如何实现高效率超简洁的实时数据采集?——Python实战电商数据采集API接口
你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。让我为大家介绍一款强大的数据采集API接口。
|
2月前
|
存储 设计模式 Java
深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!
深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!
43 2
|
2月前
|
存储 算法 计算机视觉
用Python做了个图片识别系统(附源码)
用Python做了个图片识别系统(附源码)
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
分享68个Python爬虫源码总有一个是你想要的
分享68个Python爬虫源码总有一个是你想要的
87 0
|
20天前
|
存储 定位技术 数据库
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】
|
20天前
|
数据采集 存储 人工智能
【python】python汽车效能数据集—回归建模(源码+数据集)【独一无二】
【python】python汽车效能数据集—回归建模(源码+数据集)【独一无二】
|
20天前
|
人工智能 数据可视化 数据挖掘
【python】Python国内GDP经济总量数据分析可视化(源码+报告)【独一无二】
【python】Python国内GDP经济总量数据分析可视化(源码+报告)【独一无二】