解析此网站的正确方法是什么?

时间:2016-04-23 21:43:37

标签: javascript jquery html parsing

场景:

我有一个学校的网站,我正在尝试获取可用的时间表信息。他们有一个可用于所有类的工具,这是一种PHP形式,在选择您的课程后发送帖子信息:

https://campus.concordia.ca/psc/pscsprd/EMPLOYEE/HRMS/c/CU_EXT.CU_CLASS_SEARCH.GBL

对于小样本,我会选择:

  1. 期限:2016年秋季
  2. 课程职业:本科
  3. 选择主题:CIVI
  4. 我对Javascript / jQuery相当新,所以我不确定我有哪些可用的选项。网站的布局也很难导航......

    我尝试过的事情:

    var elems = document.body.getElementsByTagName("span");
    for (var i =0 ; i <elems.length;i++){
    console.log(elems[i]);
    }
    

    我最初的尝试是识别元素结构并隔离文本,不幸的是它提供了太多的东西。

    然而,我注意到了元素模式遵循的命名约定,然后我将jQuery库粘贴到控制台并执行:

    //for the details of the courses
    var tempArray =  $('[id^="MTG_"]').map(function() { return this.innerText}).get().join();
    
    //for the name of the courses
    $('[id^="SSR_CLSRSLT_WRK_GROUPBOX2"]').map(function() {return this.title}).get().join();
    

    TL; DR问题:

    课程名称和所有详细信息未按数字顺序关系链接在一起。 相反,信息被划分为ID下的大量表格:

    $('[id^="ACE_SSR_CLSRSLT_WRK_GROUPBOX2"]') 其中也包含课程名称。然后在很多td / tr之后它就有了课程的细节。

    有没有办法连续两次使用选择器来隔离需要的东西? 例如,像这样:

    //I know this doesn't work but something like this would be nice
    
    $('[id^="ACE_SSR_CLSRSLT_WRK_GROUPBOX2"]'). $('[id^="MTG_"]').map(function() { return this.innerText}).get().join();
    

    或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

你可以像这样使用jquery find()方法:

$('[id^="ACE_SSR_CLSRSLT_WRK_GROUPBOX2"]').find('[id^="MTG_"]').map(function() {
    return this.innerText
}).get().join();

这将找到'MTG_'元素,它们是'ACE_SSR_CLSRSLT_WRK_GROUPBOX2'的子元素(直接子节点和向下节拍)。