我刚刚开始学习抓取网站。
我正在抓的网站有一个主要的“内容”类。 Content div内部是文章,文章的标题位于<h2>
标签内。
我已经想通过以下代码来引用标题。现在我想将所有标头保存在JSON文件中。如何为每个标题创建对象。显然,我的代码只是在每次迭代时替换 obj 的 title 。
var title, date, img_url, permalink;
var obj = { title : "", date : "", img_url : "", permalink : ""};
// ======== Extracting Title ================
$('#Content').filter(function(){
var data = $(this);
let headers = data.find('h2');
headers.each(function (i, el) {
obj.title = $(el).text();
})
})
答案 0 :(得分:2)
如果您想为每个{title: "Some title"}
元素添加类似于<h2>
的对象数组,那么您只需使用
const headerObjects = Array.from(document.querySelectorAll('#Content h2')).map(h2 => ({
title: h2.textContent
}))
console.info(headerObjects)
<div id="Content">
<h2>Title 1</h2>
<p>Here's some text</p>
<h2>Title 2</h2>
<p>Some more text</p>
<h2>Last title</h2>
<p>One more paragraph</p>
</div>
参考:
答案 1 :(得分:0)
尝试以下代码,。在此代码中,当您单击“创建文件”按钮时,它将创建下载链接。该链接导致下载json文件格式化o / p。
var json = [];
$("h2").each(function(i) {
var title = $(this).html();
item = {};
item ["title"] = title;
json.push(item);
});
(function () {
var textFile = null,
makeTextFile = function (text) {
var data = new Blob([text], {type: 'application/json'});
if (textFile !== null) {
window.URL.revokeObjectURL(textFile);
}
textFile = window.URL.createObjectURL(data);
return textFile;
};
create.addEventListener('click', function () {
var link = document.getElementById('downloadlink');
link.href = makeTextFile(JSON.stringify(json, null, 4));
link.style.display = 'block';
}, false);
})();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="Content">
<h2>Title 1</h2>
<p>Here's some text</p>
<h2>Title 2</h2>
<p>Some more text</p>
<h2>Last title</h2>
<p>One more paragraph</p>
</div>
<button id="create">Create file</button>
<a download="info.txt" id="downloadlink" style="display: none">Download</a>
&#13;
这是工作的jsfiddle:https://jsfiddle.net/o1kvk63o/
我认为应该可以帮到你