【问题标题】:How can I scrape only h3 tag's items?我怎样才能只抓取 h3 标签的项目?
【发布时间】:2018-06-24 05:32:58
【问题描述】:

我只想抓取 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 标签中的标签会导致这种奇怪的事情。我重写了

const titles = $(".index_title").trim();

但是在这个时候 TypeError: $(...).trim is not a function error 发生了。我的代码有什么问题?我应该如何解决这个问题?

【问题讨论】:

    标签: node.js web-crawler


    【解决方案1】:

    问题

    初步分析

    看起来您遇到的问题是因为 jQuery 为您返回了一个原生 DOM 元素列表,而不是为您提供了一个 jQuery 元素来使用。我怀疑这与使用香草循环有关,而不是jQuery 本身提供的某种方法。

    最终结论

    在使用下面的纯 javascript 和 jquery 版本后,$('...') 似乎为您提供了一个原生 DOM 元素列表,无论循环结构如何。然而,我没有意识到的是,您必须将检索到的节点转换为 jquery 元素(参见 $(this)),这绝对不是很理想。为了透明起见,这两个代码 sn-ps 都可以在下面的工作中使用,最小形式。

    最小的工作代码示例:

    // 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>

    【讨论】:

    • 感谢您的回答。当我运行您的代码时,ReferenceError: document is not defined 发生错误。我该怎么办?
    • 如果文档未定义,您应该使用 jquery only 版本。
    • 我正在使用 Node.js。我应该使用 jQuery 吗?
    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多