如何只刮取h3标签的物品?

时间:2018-06-24 05:32:58

标签: node.js web-crawler

我只想抓取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不是函数错误。我的代码出了什么问题?我该如何解决?

1 个答案:

答案 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>