中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)

这篇具有很好参考价值的文章主要介绍了中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 题目描述

中北大学信息安全技术爬虫课程设计
题目 5:招投标信息分析系统 (20050441 2005031113)

要求:文档内容至少包含系统结构、功能模块图、功能流程图、数据流图。实现语言不限。自动访问http://www.ccgp.gov.cn/获取信息

子题目 1:网络爬虫获取招标信息 要求:获取数据数量大于 2 万条,自定义多媒体格式(包括图片、声音、pdf 文件)保存在数据库中。关键字用例可自定义。统计下载数据,过滤数据。能显示、查找数据信息。每 24 小时采集一次。

子题目 2:网络爬虫获取中标信息 要求:获取数据数量大于 2 万条,自定义多媒体格式(包括图片、声音、pdf 文件)保存在数据库中。关键字用例可自定义。统计下载数据,过滤数据。能显示、查找数据信息。每 24 小时采集一次。

子题目 3:针对某一地区发出的招标信息进行分析,对该地区可实现画像,自动分析出该地区的招标特点及经济发展水平

子题目 4:对获取到的 pdf 文件进行解码,数据保存入数据库中,在数据库中增删改查。可多条件查询。

这份源代码实现的是子题目 1 和子题目 3

2. 项目细节分析

此项目中的路径均是绝对路径,需要根据实际项目位置修改。 修改完路径后点击 autoSpider 即可运行

定时爬取任务思路

24小时爬取功能实现
使用Windows系统自带的任务计划程序来实现定时执行Python程序的功能。具体操作步骤如下:

打开“任务计划程序”,可以在Windows搜索栏中输入“任务计划程序”来打开。

在左侧面板中找到“任务计划程序库”,右键点击并选择“创建任务”。

在弹出的对话框中,输入任务名称并勾选“使用最高权限运行”。

切换到“触发器”选项卡,点击“新建”,设置触发器的具体时间和频率,如每天、每周、每月等。

切换到“操作”选项卡,点击“新建”,在“程序或脚本”一栏中输入bat文件路径

点击“确定”保存设置,任务计划程序会自动执行Python程序,可以在“历史记录”中查看执行情况。
中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)

避免多次爬取数据重复问题

为了避免爬取到重复信息,这里再项目中创建了log.txt文件用来记录爬虫爬取的最新状态,如果今日的爬虫爬取到日志信息状态时,说明已经把最新的信息爬取完毕,直接退出爬虫并且更新信息即可

所以可以分析出,这个项目如果这样设计的话是不支持多线程的
中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)

网站结构

公开招标网站信息比较简单,可以直接通过GET方法获取。

我使用BS4进行解析,因为不同地方的招标信息细节结构可能不一样,但是都是存在同一个div标签下

根据爬取信息确认招标地区

这里选择优先级不同的方式统计,扫描爬取到的信息,按照优先级统计地区出现的次数,最后根据次数最多的城市的省份划分区域

这个项目使用了一个比较大的字典保存信息
中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)

3. 项目代码

由于代码比较多,这里只展示部分,完整项目Github上

from lxml import etree
from Spider.Seleium.msg_xpath import dialog
from Spider.Seleium.tool import unit_tool
from Spider.Seleium.tool import save
import openpyxl as op

# 多线程爬虫
from queue import Queue


def setup():
    # 打开保存文件
    wb = op.load_workbook('C:\\Users\\30309\\Desktop\\GovSpider\\Spider\\Seleium\\data.xlsx')

    # print(wb.get_named_ranges())  # 输出工作页索引范围
    # print(wb.get_sheet_names())  # 输出所有工作页的名称
    # 取第一张表
    # ws = wb.get_sheet_names()
    # table = wb.get_sheet_by_name(ws[0])
    table = wb.active
    # print(table.title)  # 输出表名
    nrows = table.max_row  # 获得行数
    ncol = table.max_column  # 获得行数
    print(nrows, ncol)

    # 读取配置文件
    head, endLine = save.readLog()

    # 从配置文件中获取是否添加头部信息
    have_head = False
    if head.find('True') != -1:
        have_head = True

    dialog_flag = False
    prevLine = []
    end = False
    # 爬取第1到第25页数据
    for page in range(1, 25):
        root = f'http://www.ccgp.gov.cn/cggg/zygg/gkzb/index_{page}.htm'
        html = etree.HTML(unit_tool.get_html(root))
        paths = html.xpath(dialog.href)
        for path in paths:
            print(dialog.page_root + path)
            page_msg = unit_tool.get_html(dialog.page_root + path)

            list_bs4 = unit_tool.bs4Msg(page_msg)
            if len(list_bs4) == 0:
                continue

            bs4 = list_bs4[0]
            msg = unit_tool.bs4ToStr(bs4.select('td'))
            have_file = unit_tool.haveFile(msg)
            head, val = unit_tool.splitList(msg)
            unit_tool.findCity(val)
            if have_file:
                file_id = unit_tool.getFile(bs4)
                unit_tool.insertFile(file_id, val)
                # print(file_id)
                for sub_url in file_id:
                    file_url = dialog.download_root + sub_url
                    # print(file_url)
            if not have_head:
                # 所有文件写入头,头只写一次
                save.InsertExcel(table, head, nrows)
                nrows += 1
                have_head = True
            # 写入数据
            if endLine.find(str(val)) != -1:
                end = True
                break
            if not dialog_flag:
                prevLine = val
                dialog_flag = True
            save.InsertExcel(table, val, nrows)
            nrows += 1
        if end:
            prevLine = ':'.join(endLine.split(':')[1:])
            print("Dialog: 今日数据爬取完毕")
            break

    # print("DEBUG获取完成")

    # 写入配置文件
    save.writeLog(have_head, prevLine)

    wb.save('data.xlsx')

4. 运行截图

中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)文章来源地址https://www.toymoban.com/news/detail-505643.html

到了这里,关于中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【期末复习】北京邮电大学《数字内容安全》课程期末复习笔记(2. 信息隐藏与数字水印)

    【相关链接】 【期末复习】北京邮电大学《数字内容安全》课程期末复习笔记(1. 绪论) 【期末复习】北京邮电大学《数字内容安全》课程期末复习笔记(3. 文本安全) 【期末复习】北京邮电大学《数字内容安全》课程期末复习笔记(4. 多媒体安全) 【期末复习】北京邮电

    2024年02月09日
    浏览(40)
  • 浙江理工大学数字电子技术课程设计

    班级:       20 计算机科学与技术( 3 )班          学号:              2020329621193                姓名:                  杨正龙                     序号:                3 — 22                       浙江理工大学本科课

    2024年02月12日
    浏览(49)
  • 南京航空航天大学民航管理系统课程设计

    趁着最近备战c++实习,通过以前帮朋友写的课设复习一下c++,后面附有各个模块的功能实现。 建议通过多文件封装各个类的功能。 1.总体描述 : 本程序实现对民航飞行与地图管理系统的简单操作。 2.程序菜单功能: 地图记录是一个数据库列表,每一个记录包含一个城市的信

    2024年02月08日
    浏览(57)
  • 西南交通大学 计算机组成原理实验课程设计

     代码部分: 波形图部分: (上图Load为2节拍,我之前写错了。。。这里忘了改了)

    2024年02月13日
    浏览(44)
  • C++面向对象程序设计-北京大学-郭炜【课程笔记(四)】

    开始课程:P11 1_1. this指针 课程链接:程序设计与算法(三)C++面向对象程序设计 北京大学 郭炜 课程PPT:github提供的对应课程PPT C++是没有自身编译器的,需要使用C语言的编译器,所以C++在编译时需要把语言转换为对应的C语言。 实例1: C++程序到C程序的翻译:(下图好理解,

    2024年02月22日
    浏览(49)
  • C++面向对象程序设计-北京大学-郭炜【课程笔记(三)】

    开始课程:P7 2_2. 构造函数 课程链接:程序设计与算法(三)C++面向对象程序设计 北京大学 郭炜 课程PPT:github提供的对应课程PPT 1、成员函数的一种 名字与类名相同,可以有参数,不能有返回值(void 也不行) 作用是对对象进行初始化,如给成员变量赋初值 如果定义类时没

    2024年02月19日
    浏览(43)
  • 基于Spring Boot的大学课程排课系统设计与实现

    大学课程排课是现代教育管理中重要的一环。目前,传统的排课方式已经无法满足日益增长的课程需求和学生个性化的诉求。因此,研究一种基于遗传算法的大学课程排课系统是非常必要的。本研究旨在开发一种基于SpringBoot Vue的大学课程排课系统,并运用遗传算法优化排课

    2024年02月07日
    浏览(44)
  • 大学生课程设计《基于Spring Boot的新闻发布系统》包含完整代码

    一个基于 Spring Boot 的新闻发布系统的概要和关键代码部分。您可以根据这些信息自行完成完整的项目。 一、系统概要 系统分为前端和后端两部分,前端负责展示新闻列表和详情,后端负责提供新闻的发布、查询和删除功能。 后端使用 Spring Boot 框架,内置 Tomcat 服务器,简化

    2024年02月08日
    浏览(48)
  • 《web课程设计》使用HTML+CSS制作大学生校园二手交易网站

    ❤ 【作者主页——🔥获取更多优质源码】 ❤ 【学习资料/简历模板/面试资料/ 网站设计与制作】 ❤ 【web前端期末大作业——🔥🔥毕设项目精品实战案例】 # 一、👨‍🎓网站题目 🏫 校园网页设计 、学校班级网页制作、学校官网、小说书籍、等网站的设计与制作。 🏷️

    2024年02月02日
    浏览(55)
  • 智能信息检索课程设计

    这是一个课程设计,具体的课设要求如下: 根据自己从网上下载的任意文档集,采用python程序设计语言,进行 分词 ,再 去掉停用词和标点符号等 , 生成文档的词典 ,接着根据词典和文档内容生成 词项的倒排记录表(含位置信息) ,然后根据搜索(多个词项),对

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包