jquery做的nodejs小爬虫

想做个博客网站练练手,数据就打算用node爬下来,存入数据库待使用,就爬CSDN博客吧。(站主勿怪~)
首先做准备工作:
1、下载请求插件request(用node内置的http模块、SuperAgent、axios或ajax都可以);
2、下载jquery;
3、单纯用jquery是获取不到标签的,因为这是在控制台输出的,jquery只能获取到浏览器标签。于是下载JSDOM模拟浏览器(也可以用PhantomJS);
4、下载mysql。
代码如下:npm install request jquery jsdom mysql

准备工作2:
1、引入模块:

const request = require('request')
const mysql = require('mysql')
const jsdom = require('jsdom')
const {JSDOM} = jsdom

2、创建数据库连接池:

const db = mysql.createPool({
  host: 'IP',
  user: '用户名',
  password: '密码',
  database: '数据库名'
})

正式爬虫:
1、请求页面,实例化JSDOM对象

request.get('https://www.csdn.net/', (err, res) => {
	if (err) {
	  throw err
	}
	const {window} = new JSDOM(res.body)
	const $ = require('jquery')(window)   //此时$已经获取到页面标签
})

2、分析页面
获取下图数据
在这里插入图片描述
查看标签如下图
在这里插入图片描述
此时要获取列表的标题

 $('.feedlist_mod>li').each(function (i) {
   let title = $(this).find('.title>h2>a').text().trim()  //此时可以遍历出列表的标题
})

3、把获取到的数据存入数据库(先创建数据库,再创建数据表,然后设计表)

db.query(`insert into home_feed (title) value('${title}')`, (err, data) => {
  if (err) {
    console.log(err)
  }
})

4、处理重复数据,查询数据库是否有该条信息,没有才存入

db.query(`select * from home_feed where title='${title}'`, (err, data) => {
      if (err) {
        console.log(err)
      }
      if (data.length < 1) {
      //存入数据库操作
      }
})

-------------------------------------------------------我是分割线呀--------------------------------------------------------------------

遇到的问题:
1、为什么不用cheerio?
答:cheerio用起来很简单,但是存在一个问题,数据获取成功,第一次分析能成功,但是后面解析一直失败,遂弃用。(虽然jquery也有同样的问题)
2、jsdom第一次分析能成功,但后面解析失败怎么解决?
答:数据获取成功的前提下,jsdom加载页面失败,jquery获取不到标签,初步解决方案是把标签遍历放到$(function(){})里(第一天成功了,第二日俺看又出问题了,有待解决)
3、需要登录的页面待解决。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值