自动类时间表优化了爬虫?

时间:2009-01-07 09:24:21

标签: python screen-scraping scheduling

总体规划

获取我的课程信息以自动优化并选择我的uni课程时间表

整体算法

  1. 使用它登录网站 企业登录引擎登录
  2. 找到我当前的学期及其 相关科目(预先设置)
  3. 导航到右侧页面并从每个相关内容中获取数据 主题(讲座,实践和 研讨会时间)
  4. 删除无用的数据 信息
  5. 排名靠近的班级 彼此更高,那些更高 随机天数降低
  6. 解决最佳时间表解决方案
  7. 输出我的详细清单 最佳案例信息
  8. 输出我的详细清单 可能的班级信息(一些 可能是完整的例如)
  9. 获取程序以选择最佳 课程自动
  10. 继续检查是否可以 实现7。
  11. 6详细说明 使用讲座作为焦点,获得所有课程的排名最高(每个科目只有一个),并尝试安排课程。

    问题

    任何人都可以向我提供一些链接,这些链接可能类似​​于希望用python编写的内容吗? 关于6:您建议将此信息存储在哪个数据结构中?一个链表,其中每个uniclass对象? 我应该将所有信息都写入文本文件吗?

    我正在考虑将uniclass设置如下 属性:

    • 主题
    • 等级
    • 时间
    • 类型
    • 教师

    我几乎没有Python经验,并认为这将是一个很好的学习项目,试图完成。 感谢您提供的任何帮助和链接,以帮助我开始,开放编辑以适当地标记或什么是必要的(不确定除了编程和python之外还有什么?)

    编辑:无法为此SO帖子><

    获得正确的格式

3 个答案:

答案 0 :(得分:2)

根据您计划服用#6的程度以及数据集的大小,这可能是非平凡的;它对我来说无疑是NP难的全局优化......

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

所以,你有两个限制:

  1. 按分数对课程进行总排序; 这很灵活。
  2. 班级冲突;这不灵活。
  3. 我的意思是灵活的是你可以去更多间隔的课程(分数较低),但你不能同时在两个班级。有趣的是,得分和冲突之间可能存在正相关关系;得分较高的班级更容易发生冲突。

    我对算法的第一次传递:

    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分钟或您需要的任何内容)可以更容易地查找不同类的开始和结束之间的重叠。

答案 1 :(得分:0)

这里曾多次提到

BeautifulSoup,例如get-list-of-xml-attribute-values-in-python

  

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

     
      
  1. 如果给你不好的标记,美丽的汤不会窒息。它产生一个解析树,使其与原始文档几乎一样有意义。这通常足以收集您需要的数据并逃跑。
  2.   
  3. Beautiful Soup提供了一些简单的方法和Pythonic习语,用于导航,搜索和修改解析树:用于剖析文档和提取所需内容的工具包。您不必为每个应用程序创建自定义解析器。
  4.   
  5. Beautiful Soup会自动将传入的文档转换为Unicode,将传出的文档转换为UTF-8。您不必考虑编码,除非文档没有指定编码并且Beautiful Soup不能自动检测编码。然后你只需要指定原始编码。
  6.         

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

         

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

答案 2 :(得分:0)

这里有太多问题。

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

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

  1. 抓HTML

    1使用Enterprise Sign On Engine登录登录网站

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

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

    4删除无用信息的数据

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

    5对彼此较近的等级进行排序,随机天数较低的等级

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

  3. 输出内容。

    7输出最佳案例信息的详细列表

    8输出可能的班级信息的详细列表(例如,某些可能已满)

  4. 优化某些内容,寻找“最佳”。另一个不确定的术语。

    9让程序自动选择最佳课程

    10继续检查我们是否能达到目标。

  5. BTW,Python有“lists”。他们是否“联系”并没有真正进入它。