【问题标题】:Automated Class timetable optimize crawler?自动上课时间表优化爬虫?
【发布时间】:2009-01-07 09:24:20
【问题描述】:

总体规划

获取我的班级信息以自动优化和选择我的大学课程时间表

整体算法

  1. 使用其登录网站 企业登录引擎登录
  2. 查找我当前的学期及其 相关主题(预设置)
  3. 导航到右侧页面并获取每个相关的数据 主题(讲座,实践和 研讨会时间)
  4. 剥离无用的数据 信息
  5. 对更接近的类进行排名 对彼此更高,那些在 随机天数降低
  6. 解决最佳时间表解决方案
  7. 给我一个详细的列表 最佳案例信息
  8. 给我一个详细的列表 可能的类信息(一些 例如可能已满)
  9. 获取程序以选择最佳 自动上课
  10. 继续检查是否可以 达到 7。

6 详细 获取所有课程,以讲座为重点,排名最高(每个科目只有一个),并尝试围绕此安排课程。

问题

谁能给我提供一些可能类似于希望用python编写的东西的链接? 关于 6.:您建议将这些信息存储在什么数据结构中?每个uniclass对象的链表在哪里? 我应该将所有信息写入文本文件吗?

我认为 uniclass 设置如下 属性:

  • 主题
  • 排名
  • 时间
  • 类型
  • 老师

我在 Python 方面几乎没有经验,我认为这将是一个很好的学习项目,可以尝试完成。 感谢您提供的任何帮助和链接以帮助我入门,打开编辑以适当地标记或任何必要的内容(不确定这属于编程和 python 之外的什么?)

编辑:无法为这篇 SO 帖子获得我想要的正确格式>

【问题讨论】:

  • 也许格式更接近你想要的
  • 当我还是学生的时候,我时而喜欢,时而厌恶的一项任务,尽管我总是手工完成。最好的是周二至周四的课程预订稳定,因此您有一个为期 4 天的周末。 10:00 左右开始总是好的,所以你可以睡在里面。:)

标签: python screen-scraping scheduling


【解决方案1】:

取决于您计划在#6 上走多远,以及数据集有多大,这可能并不重要;这对我来说确实有点 NP-hard 全局优化的味道......

不过,如果您谈论的是数十个(而不是数百个)节点,那么一个相当愚蠢的算法应该可以提供足够好的性能。

所以,你有两个限制:

  1. 按分数对类进行总排序; 这是灵活的。
  2. 类冲突;这不灵活。

我所说的灵活是指你可以去更多间隔的班级(分数更低),但你不能同时参加两个班级。有趣的是,得分和冲突之间可能存在正相关关系。得分较高的班级更有可能发生冲突。

我第一次通过算法:

selected_classes = []
classes = sorted(classes, key=lambda c: c.score)
for clas in classes:
    if not clas.clashes_with(selected_classes):
        selected_classes.append(clas)

如果课程长度不均匀、从奇怪的时间开始等等,解决冲突可能会很尴尬。将开始时间和结束时间映射为时间“块”的简化表示(每 15 分钟/30 分钟或任何您需要的时间)将更容易查找不同类的开始和结束之间的重叠。

【讨论】:

    【解决方案2】:

    BeautifulSoup 在这里被提及了几次,例如get-list-of-xml-attribute-values-in-python

    Beautiful Soup 是一个 Python HTML/XML 解析器,专为屏幕抓取等快速周转项目而设计。三个功能使它变得强大:

    1. Beautiful Soup 不会因为你的错误标记而窒息。它会生成一个解析树,其意义与您的原始文档大致相同。这通常足以收集您需要的数据并逃跑。
    2. Beautiful Soup 提供了一些用于导航、搜索和修改解析树的简单方法和 Pythonic 习惯用法:用于剖析文档和提取所需内容的工具包。您不必为每个应用程序创建自定义解析器。
    3. Beautiful Soup 自动将传入文档转换为 Unicode,将传出文档自动转换为 UTF-8。您不必考虑编码,除非文档未指定编码并且 Beautiful Soup 无法自动检测编码。然后你只需要指定原始编码。

    Beautiful Soup 会解析你给它的任何东西,并为你做树遍历的东西。您可以告诉它“查找所有链接”,或“查找类 externalLink 的所有链接”,或“查找所有 url 匹配“foo.com”的链接,或“查找带有粗体文本的表格标题,然后给出我那个文本。”

    曾经锁定在设计不佳的网站中的宝贵数据现在触手可及。使用 Beautiful Soup 可能需要数小时才能完成的项目只需几分钟。

    【讨论】:

      【解决方案3】:

      这里的问题太多了。

      请将其分解为主题领域,并针对每个主题提出具体问题。请专注于其中一个有具体问题的问题。请定义您的术语:“最佳”并不意味着没有一些特定的衡量标准来优化。

      这是我认为我在您的主题列表中看到的内容。

      1. 抓取 HTML

        1 使用企业登录引擎登录名登录网站

        2 查找我当前的学期及其相关科目(预设置)

        3 导航到右侧页面并获取每个相关主题的数据(讲座、实践和研讨会时间)

        4 剥离无用信息的数据

      2. 一些算法基于“彼此更接近”来“排名”以寻找“最佳时间”。由于这些术语未定义,因此几乎不可能对此提供任何帮助。

        5 将彼此接近的班级排名较高,随机日期的班级排名较低

        6 求解最佳时间表解决方案

      3. 输出一些东西。

        7 给我输出一份BEST CASE信息的详细列表

        8 向我输出可能的类信息的详细列表(例如,有些可能是完整的)

      4. 优化某些东西,寻找“最佳”。另一个无法定义的术语。

        9 让程序自动选择最好的类

        10 继续检查我们是否可以达到 7。

      顺便说一句,Python 有“lists”。他们是否“链接”并没有真正参与其中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多