美文网首页
node puppeteer爬虫,爬取微博热搜数据

node puppeteer爬虫,爬取微博热搜数据

作者: Rogi | 来源:发表于2020-07-09 22:46 被阅读0次

确保自己熟练使用async与await以及分析dom结构

npm i puppeteer

在node引用

const puppeteer = require('puppeteer');

尝试在无头浏览器打开微博热搜

const puppeteer = require('puppeteer');
var scrape = async () => {
    // 初始化无头浏览器
    const browser = await puppeteer.launch({headless: false});
    // 在无头浏览器打开一个空白标签
    const page = await browser.newPage();
    // 给刚刚打开的空白标签给予链接跳转
    await page.goto('https://s.weibo.com/top/summary');
    // close()用于关闭无头浏览器
    // browser.close()
    return '执行完毕啦'
}
scrape().then((value) => {
    console.log(value)
});

打开了无头浏览器之后如何获取里面的元素呢?怎么进行爬虫呢

  • 直接用原生的document.getElementById document.getElementsByClassName querySelector querySelectorAll等等
  • 或者用puppeteer自带的 $eval() $$eval()
    获取单个元素可用$eval()和jq差不多,相当于原生js的querySelector
    获取元素组可用$$eval()$eval()用法一样,相当于原生的querySelectorAll

分析热搜榜dom结构


上面说了获取元素组要用到$$eval()我们要获取这一组的tr标签,可以这样子获取
await page.$$eval('#pl_top_realtimehot table tbody tr', e => e)

注:e其实就是元素组

console.log(await page.$$eval('#pl_top_realtimehot table tbody tr', e => e.length)) // 51

获取tr的代码

const puppeteer = require('puppeteer');
var scrape = async () => {
    // 初始化无头浏览器
    const browser = await puppeteer.launch({headless: false});
    // 新建页面
    const page = await browser.newPage();
    // 跳转到指定页面
    await page.goto('https://s.weibo.com/top/summary/');
    // 获取tr结构
    const data = await page.$$eval('#pl_top_realtimehot table tbody tr', e => e)
    browser.close()
    return data
}
scrape().then((value) => {
    console.log(value)
});

如何获取tr标签里面的元素?实现正在意义上的爬虫??

先确认确认我们需要哪些数据,然后分析dom结构



分析了dom了之后

  1. 遍历tr
  2. 从tr里面获取每一项的数据
const puppeteer = require('puppeteer');
var scrape = async () => {
    // 初始化无头浏览器
    const browser = await puppeteer.launch({headless: false});
    // 新建页面
    const page = await browser.newPage();
    // 跳转到指定页面
    await page.goto('https://s.weibo.com/top/summary/');
    // 获取tr,并且循环
    const data = await page.$$eval('#pl_top_realtimehot table tbody tr', e => e.map(el => {
      // 获取需要的数据
      const title = el.querySelector('td.td-02 a').innerHTML
      const hot = el.querySelector('td.td-02 span')
      const tag = el.querySelector('td.td-03').innerText
      return {
        title,
        hot: hot ? hot.innerHTML : 0,
        tag
      }
    }))
    browser.close()
    return data
}
scrape().then((value) => {
    console.log(value)
});

相关文章

  • node puppeteer爬虫,爬取微博热搜数据

    确保自己熟练使用async与await以及分析dom结构 npm i puppeteer 在node引用 尝试在无...

  • 三十. 模拟登陆实战 - 爬取微博信息

    爬取网址:http://m.weibo.cn→搜索→微博热搜榜爬取信息:热搜榜内容爬取方式:json数据存储方式:...

  • node 爬虫微博热搜

    这个是写的第二个版本,第一个版本爬虫已经不能使用了。第一个版本直接使用的是axios get请求获取页面字符串,使...

  • 微博热搜爬取(三)

    对于上一篇的微博OCR提取热搜的方法显得十分笨拙,本篇用scrapy干净利落地解决了问题。 1. 写爬虫爬取热搜网...

  • 爬取新浪微博热搜

    一、准备工作 在搜索中查看榜单,先爬取实时热搜榜 老样子,在Chrome中检查下元素,可以发现我们想要的内容 但在...

  • 【工具】echarts+kuno+分词

    数据: python爬虫:微博爬虫、借助'出书啦'爬微信知乎Java爬虫:Java微博爬虫 时间轴: JAVA时间...

  • node利用puppeteer实现数据爬取

    puppeteer 简介 puppeteer是一个以headless模式运行浏览器的npm包,它提供高级API来通...

  • 抓取微博热搜榜单

    1. 引言 利用scrapy框架爬取微博热搜榜[https://s.weibo.com/top/summary]网...

  • scrapy爬取新浪微博分享(1)

    内容概要: 最近自己学习了一些爬虫,学习之余,写了一个新浪微博的爬虫。大规模爬数据没有试过,但是爬取几十万应该没有...

  • scrapy爬取新浪微博分享(2)

    内容概要: 最近自己学习了一些爬虫,学习之余,写了一个新浪微博的爬虫。大规模爬数据没有试过,但是爬取几十万应该没有...

网友评论

      本文标题:node puppeteer爬虫,爬取微博热搜数据

      本文链接:https://www.haomeiwen.com/subject/plsecktx.html