我只想抓取h3标签的项目。HTML就像
<h3 class="index_title">
<a href="/test/1112">
Lorem ipsum dolor sit amet, consectetur adipiscing elit
</a>
</h3>
我写了代码,
var Crawler = require("node-webcrawler");
var url = require('url');
var connection = require('./mysqlConnection');
var c = new Crawler({
maxConnections : 10,
callback : function (error, result, $) {
if(error){
console.log(error);
}else{
const titles = $(".index_title");
for(var i = 0; i < titles.length; i ++){
const title = $(titles[i]).text();
var query = 'INSERT INTO crawling (title) VALUES ("' + title + '")';
connection.query(query, function(err, rows) {
console.log(err);
});
}
}
}
});
c.queue('https://xxxxxxx.jp/');
当我运行代码时," Lorem ipsum dolor sit amet, consectetur adipiscing elit"
在DB中,所以那里没有空间。我只想获取Lorem ipsum ~~字母,但我认为h3标签中的标签会引起这种奇怪的情况。我重写< / p>
const titles = $(".index_title").trim();
但是这次TypeError:$(...)。trim不是函数错误。我的代码出了什么问题?我该如何解决?
答案 0 :(得分:1)
您遇到的问题似乎是因为jQuery给您返回了一个本机DOM
元素列表,而不是给您一个jQuery
元素来使用。我怀疑这与使用香草循环有关,而不与jQuery
本身提供的某些方法有关。
在使用下面的纯javascript和jquery版本之后,$('...')
似乎为您提供了本机DOM
元素的列表,而与循环结构无关。但是,我没有意识到的是,然后您必须将检索到的节点转换为jquery
元素(见$(this)
),这绝对不是很理想。为了透明起见,以下两个代码片段均以其工作的最小形式提供。
// jQuery only
$(".index_title").each(function() {
const title = $(this).text().trim();
console.log(title);
});
// Javascript only
const titles = document.getElementsByClassName('index_title');
for(var i = 0; i < titles.length; i ++) {
const title = titles[i].innerText.trim();
console.log(title);
}
<html>
<head></head>
<body>
<h3 class="index_title">
<a href="/test/1112">
1 Lorem ipsum dolor sit amet, consectetur adipiscing elit
</a>
</h3>
<h3 class="index_title">
<a href="/test/1112">
2 Lorem ipsum dolor sit amet, consectetur adipiscing elit
</a>
</h3>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</body>
</html>