首页 > 解决方案 > 我怎样才能只抓取 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 发生。我的代码有什么问题?我应该如何解决这个问题?

标签: node.jsweb-crawler

解决方案


问题

初步分析

看起来您遇到的问题是因为 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>


推荐阅读