說到網絡爬蟲,大家第一時間想到的可能是python,但其實Node.js也十分適合用來爬蟲。爬蟲通常涉及大量請求,像推特這種由js/ajax动态生成的網頁更是必須等待數據加載完成才能進行爬取。Node.js的單線,非阻塞I/O機制使它在等待請求與渲染時不會被阻塞,大大提高速度。

Puppeteer

Puppeteer 是 Node.js 的函式庫,它提供各種 API 來控制 Chrome 或 Chromium 瀏覽器,而此瀏覽器也是目前主流的瀏覽器,用來做為測試、爬蟲都相當合適,並且所提供的 API 語法淺顯易懂。這次我就用到爬蟲相關幾個方法,其他使用方法可以到puppeteer查看。

準備

  • 在初始化Node.js後先安裝相關的包
npm install Puppeteer
  • 創建twitter.js,我們會在裡面封裝好方法,然後在index.js調用

  • 創建index.js并引入
const puppeteer = require('puppeteer');
const fs = require('fs');
const twitter = require('./twitter');//自己封裝的方法

用puppeteer打開一個瀏覽器

 initialize : async () => {browser = await puppeteer.launch({//如果為true則只在後台運行headless : false, defaultViewport: {width: 1440,height: 1080}});},

觀察URL



在加上advanced search後URL會變化,可以很明顯地分辨到q=chinesevirus就是router控制關鍵詞內容部分,我們要搜索不同內容只需要在這傳入不同的關鍵詞。

進行搜索與抓取

對於有次序要求的操作都要加上await。await必須在async函數中使用,它的作用是等待一個Promise 物件,它會暫停代碼在該行上,直到 promise 完成,然後返回結果值。在暫停的同時,其他正在等待執行的代碼就有機會執行了。
await後面可以接任何要等待的值,比如let tweetsArray = await page.$$(‘element’);會等待所有element被選中後并返回後才執行後面的代碼。

sreachTweet:async(keyword,count)=>{let url = `https://twitter.com/search?q=${keyword}%20min_faves%3A200%20lang%3Aen%20until%3A2020-03-24%20since%3A2020-03-17&src=typed_query&f=live`let index = 0;await page.goto(url);//等待目標元素await page.waitFor('div[data-testid="tweet"]');let tweets = [];while(tweets.length < count){//當前條數少於count則繼續//滾到頁底,觸發lazyloadingawait page.evaluate('window.scrollTo(0,document.body.scrollHeight)');await page.waitFor(3000);let tweetsArray = await page.$$('div[data-testid="tweet"]>div.r-1mi0q7o');for (let tweetElement of tweetsArray){index++let userName = await tweetElement.$eval('span>span',element => element.innerText);let userID = await tweetElement.$eval('div+div>div>span',element => element.innerText);let Time = await tweetElement.$eval('a[title]',element => element.getAttribute('title'));let Content = await tweetElement.$$eval('div+div>div>div>span',element => element.map(data => data.innerText));tweets.push({index,userName,userID,Time,Content});}//以追加模式寫入tweets.json文件}fs.writeFileSync('./tweets.json',JSON.stringify(tweets),{flag:'a'},'utf-8');return tweets;},

調用

最後在index.js調用我們寫好的函數就可以了

(async () => {await twitter.initialize();await twitter.sreachTweet('chinesevirus',10);
})();

結果

最後小試牛刀爬了8488條推,分析就留下次吧!!

Node.js + puppeteer爬取推特ChineseVirus評論(1)相关推荐

  1. 【Mac】从0开始用node.js制作爬取结果的查询网站

    [Mac]从0开始用node.js制作爬取结果的查询网站 实验要求 实验结果展示 简单了解实验项目所需知识 1 爬虫原理 2 JavaScript语法 3 网络元素的提取 4 正则表达式 5 其他有关 ...

  2. java爬虫拉勾网_[Java教程]node.js爬虫爬取拉勾网职位信息

    [Java教程]node.js爬虫爬取拉勾网职位信息 0 2017-03-14 00:00:21 简介 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招聘信息,共爬取了北京.上海.广州.深圳 ...

  3. Node.js 爬虫爬取电影信息

    Node.js 爬虫爬取电影信息 本文地址:https://blog.csdn.net/weixin_45580251/article/details/107669713 爬取的是1905电影网的信息 ...

  4. node.js爬虫爬取电影天堂,实现电视剧批量下载。

    2019独角兽企业重金招聘Python工程师标准>>> ###一.项目描述   引言:在电影天堂下电视剧的下伙伴有木有发现,它没有提供批量下载功能,美剧英剧还好,10集左右,我就多点 ...

  5. python爬取大众点评数据_利用Node.js制作爬取大众点评的爬虫

    前言 Node.js天生支持并发,但是对于习惯了顺序编程的人,一开始会对Node.js不适应,比如,变量作用域是函数块式的(与C.Java不一样):for循环体({})内引用i的值实际上是循环结束之后 ...

  6. node爬取app数据_使用node.js如何爬取网站数据

    数据库又不会弄,只能扒扒别人的数据了. 搭建环境: (1).创建一个文件夹,进入并初始化一个package.json文件. npm init -y (2).安装相关依赖: npm install -- ...

  7. node:爬虫爬取网页图片 1

    代码地址如下: http://www.demodashi.com/demo/13845.html 前言 周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图 ...

  8. node 爬虫 实战 - 爬取拉勾网职位数据

    node 爬虫 实战 - 爬取拉勾网职位数据,主要想把数据用于大数据学习,到时候大数据分析可以自己分析一下职位的情况,和比较一些我现在的职位在深圳乃至全国的开发人员水平. 涉及到的技术栈:node.j ...

  9. Python爬虫——教你js逆向爬取网易云评论

    大家好!我是霖hero 正所谓条条道路通罗马,上次我们使用了Selenium自动化工具来爬取网易云的音乐评论,Selenium自动化工具可以驱动浏览器执行特定的动作,获得浏览器当前呈现的页面的源代码, ...

最新文章

  1. java与javascript之间json格式数据互转
  2. mysql性能测试工具msyqlslap_mysqlslap工具测试mysql DB的性能
  3. TCP/IP / IP 头
  4. 10 windows 启动虚拟机报错_Windows 系统如何安装 Docker
  5. 【公开课预告】百度语言与知识最新技术成果详解
  6. 罗杰斯:做你喜欢的工作,你会变成个有钱人
  7. java图形化界面设置焦点_如何在更新窗口时防止Java图形程序窃取焦点?
  8. STM32基于SPI和AD7192的数据采集
  9. MySQL笔记(七)数据库三范式
  10. MySQL高级-内存管理及优化
  11. Hadoop-2.6.0NodeManager Restart Recover实现分析(一)
  12. 大数据可视化如何实现
  13. ASM 管理 转自三思笔记
  14. 超高频RFID R200系列远距离一体化读写器开发测试
  15. 【马克思主义基本原理】--第一章--【世界的物质性及发展规律】
  16. LoRa和NB-IoT会长期共存吗?
  17. 【无标题】灵遁者沉思:每个人都有“第三只眼睛”
  18. css解决 多张图片如何统一大小 且没拉伸问题
  19. Python爬虫网易云歌词及词频统计--(周杰伦top50)
  20. error:src refspec xxx does not match any的原因及解决办法

热门文章

  1. 字符串匹配(JS实现)
  2. 【附源码】Java计算机毕业设计母婴用品店管理系统(程序+LW+部署)
  3. 学习FastDFS这一篇就够了
  4. mac使用Fiddler实现ios抓包
  5. 任务计划无法连上远程计算机,win7计划任务,找不到远程计算机.docx
  6. MATLAB 一行代码应用ggtheme主题--boxchart版(框须图,箱线图)
  7. Linux性能优化——Linux网络基础
  8. OpenAI 发布 GPT-4 ,功能炸裂!网友:真人工智能更近一步!
  9. TSDB与Blockchain
  10. 小米笔试题 依据父子关系建树