node.js - 我怎样才能只抓取 h3 标签的项目?
问题描述
我只想抓取 h3 标签的 items.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标签中的标签会导致这个奇怪的事情。我重写了
const titles = $(".index_title").trim();
但是在这个时候 TypeError: $(...).trim is not a function error 发生。我的代码有什么问题?我应该如何解决这个问题?
解决方案
问题
初步分析
看起来您遇到的问题是因为 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>
推荐阅读
- python - seaborn:如何在 X 轴上添加第二级标签
- azure - 有没有办法使用逻辑应用将数据加载到 Azure 数据湖存储第 2 代?
- python - 绘制具有 8 个特征的 k-最近邻图?
- c# - Linq 'join ... into' 不返回连接对象
- firebase - Cloud Firestore 中的服务器端锁
- java - 使用 AWS Java SDK,是否可以取消绑定到堆栈的角色?
- java - 如果无法验证,如何检查测试用例
- c - c中的隐式转换和显式转换
- xamarin - 如何在visual studio中使用或重新安装android模拟器
- ruby - 合并具有相同键的 Ruby 哈希值