适当的解析此网站的方法是什么?

3

情境:

我有一个学校的网站,想获取课程表信息。他们提供了一种工具,用于所有班级,是一种PHP表单,在选择课程后发送帖子信息,如下所示:

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

对于一个小样本,我会选择:

  1. 学期:2016秋季
  2. 课程类别:本科生
  3. 选择主题:CIVI

我对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();

问题简述:

课程名称及其所有详细信息并未通过编号关系链接在一起,而是将信息分为大量表格存储在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个回答

1
您可以像这样使用jQuery的find()方法:

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

这将查找“ACE_SSR_CLSRSLT_WRK_GROUPBOX2”(直接子级和更深层次的子级)的“MTG_”元素。

由于实际信息总是在<span>中找到,因此将其添加到find()方法的选择器中是有意义的,否则您将获得重复项。因此,改进后的选择器应为:'span[id^="MTG_"]' - Carsten Massmann
@cars10 嗯,我通过循环遍历重要的单独表格并获取它们的子元素来解决了这个问题。另外一个问题是,我能否使用这些信息?我试过在控制台保存了它,但现在我不知道如何将文本/日志文件用于我需要的Javascript变量。 - Jacky Moon
1
@JackyMoon: 一旦您在数组中拥有所需的数据(假设变量名为a),那么您可以执行console.log(JSON.stringify(a))在控制台窗口生成一个JSON字符串,然后将其复制并粘贴到js文件中。 JSON是一种通用格式,也可以在JavaScript之外使用。 - Carsten Massmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接