├── .gitignore ├── README.md ├── package.json └── tscraper.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Node Twitter Scraper 2 | =================== 3 | 4 | Use this tool to scrape information for any given twitter account (without using the Twitter API). 5 | 6 | # Installation 7 | ``` 8 | $ npm install -g tscraper 9 | ``` 10 | # Usage 11 | ``` 12 | $ tscraper 13 | ``` 14 | #Example 15 | ``` 16 | $ tscraper meakaakka 17 | ``` 18 | ```javascript 19 | { name: 'Akash Nimare', 20 | username: '@meakaakka', 21 | bio: 'Undergrad Student @ NIT Surat | S15 @HackerRank | Currently working with @zulip | FOSS', 22 | join_date: 'March 2011', 23 | tweets: '852', 24 | following: '794', 25 | followers: '224', 26 | likes: '343' } 27 | ``` 28 | 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "tscraper", 3 | "version" : "0.0.6", 4 | "description" : "Scrape user details from Twitter Accounts without using Twitter api", 5 | "main" : "tscraper.js", 6 | "author" : "akashnimare", 7 | "license": "MIT", 8 | "repository": "https://github.com/akashnimare/twitter-scraper", 9 | "author": { 10 | "name": "Akash Nimare", 11 | "email": "svnitakash@gmail.com", 12 | "url": "http://akashnimare.in" 13 | }, 14 | "bin": "tscraper.js", 15 | "files": [ 16 | "tscraper.js" 17 | ], 18 | "keywords": [ 19 | "twitter-scraper", 20 | "twitter", 21 | "Scrape", 22 | "twitter api" 23 | ], 24 | "preferGlobal": "true", 25 | "dependencies" : { 26 | "request" : "latest", 27 | "cheerio" : "latest" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tscraper.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | const cheerio= require('cheerio'); 4 | const request= require('request'); 5 | 6 | const tscraper = function (twitterUsername) { 7 | 8 | const twitterUrl = 'https://twitter.com/' + twitterUsername; 9 | 10 | request(twitterUrl, function(error, response, html) { 11 | 12 | if (!error) { 13 | const $ = cheerio.load(html); 14 | const $wrapper = $('.ProfileHeaderCard'); 15 | const $new = $('.ProfileNav'); 16 | let name, username, bio, location, webpage, join_date, following, tweets, followers, likes; 17 | 18 | name = $wrapper.find('.ProfileHeaderCard-name a').first().text(); 19 | username = $wrapper.find('.ProfileHeaderCard-screenname > a').first().text(); 20 | bio = $wrapper.find('.ProfileHeaderCard-bio').first().text(); 21 | join_date = $wrapper.find('.ProfileHeaderCard-joinDate .ProfileHeaderCard-joinDateText').first().text().replace('Joined','').substring(1); 22 | tweets = $new.find('.ProfileNav-item--tweets .ProfileNav-value').first().text(); 23 | following = $new.find('.ProfileNav-item--following .ProfileNav-value').first().text(); 24 | followers = $new.find('.ProfileNav-item--followers .ProfileNav-value').first().text(); 25 | likes = $new.find('.ProfileNav-item--favorites .ProfileNav-value').first().text(); 26 | 27 | const userData = { 28 | name: name, 29 | username: username, 30 | bio: bio, 31 | join_date: join_date, 32 | tweets:tweets, 33 | following: following, 34 | followers:followers, 35 | likes:likes 36 | }; 37 | 38 | console.log(userData); 39 | } 40 | }); 41 | } 42 | 43 | tscraper(process.argv[2]); 44 | 45 | module.exports = { 46 | tscraper 47 | } 48 | --------------------------------------------------------------------------------