列表的 cheerio 选择
cheerio selection of a list
在我需要抓取的页面上(使用 node.js 和 cheerio),我有这个模式:
<h2>
<span id="2015"></span>
<span class="ignore-me"></span>
</h2>
<div>
<ol>
<li>
<a title="TITLE1" href="HREF1"></a>
<a class="image" title="ignore-me-1" href="ignore-me-1"></a>
</li>
...
<li>
<a title="TITLE2" href="HREF2"></a>
<a class="image" title="ignore-me-2" href="ignore-me-2"></a>
</li>
</ol>
</div>
我想提取一个包含 TITLEs 和 HREFs 的列表。
我正在尝试这样的事情:
$('h2 > span[id="2015"]').next('ol > li > a').each(function(index, element) {
console.log('title:', element.attr('title'), 'href:', element.attr('href'));
});
没有成功(each
循环从未进入...)。
有什么建议吗?
h2
标签没有 ID,因此您的选择器找不到任何结果,没有可循环的内容。
您可以通过循环定位标签轻松做到这一点。
$("a").each(function(i, e) {
if (e.attr('title') && e.attr('href')) console.log("... stuff ...");
});
或者您可以给 h2
一个 ID,或者从您的选择器中删除该 ID。多种循环方式。
ol
元素实际上并不是 span#2015
的下一个元素。 ol
元素位于 div
内,它是 h2
的下一个元素。正确的树遍历是:
$('h2 > span[id="2015"]')
.parent()
.next('div')
.find('ol > li > a:not([class])')
.each(function() {
var $el = $(this);
console.log('title:', $el.attr('title'), 'href:', $el.attr('href'));
});
在我需要抓取的页面上(使用 node.js 和 cheerio),我有这个模式:
<h2>
<span id="2015"></span>
<span class="ignore-me"></span>
</h2>
<div>
<ol>
<li>
<a title="TITLE1" href="HREF1"></a>
<a class="image" title="ignore-me-1" href="ignore-me-1"></a>
</li>
...
<li>
<a title="TITLE2" href="HREF2"></a>
<a class="image" title="ignore-me-2" href="ignore-me-2"></a>
</li>
</ol>
</div>
我想提取一个包含 TITLEs 和 HREFs 的列表。
我正在尝试这样的事情:
$('h2 > span[id="2015"]').next('ol > li > a').each(function(index, element) {
console.log('title:', element.attr('title'), 'href:', element.attr('href'));
});
没有成功(each
循环从未进入...)。
有什么建议吗?
h2
标签没有 ID,因此您的选择器找不到任何结果,没有可循环的内容。
您可以通过循环定位标签轻松做到这一点。
$("a").each(function(i, e) {
if (e.attr('title') && e.attr('href')) console.log("... stuff ...");
});
或者您可以给 h2
一个 ID,或者从您的选择器中删除该 ID。多种循环方式。
ol
元素实际上并不是 span#2015
的下一个元素。 ol
元素位于 div
内,它是 h2
的下一个元素。正确的树遍历是:
$('h2 > span[id="2015"]')
.parent()
.next('div')
.find('ol > li > a:not([class])')
.each(function() {
var $el = $(this);
console.log('title:', $el.attr('title'), 'href:', $el.attr('href'));
});