Menu
Portfolio
Blog
Snippets
Login
Confirm
exit_to_app
Close
Entries
library_add
Utility(Event,Mouse): Log Movement X,Y
delete
Utility(txt): Basic Sentence Generator
delete
Utility(Event,Keyboard): Logger
delete
Utility(txt): Expanded Phrase Generator
delete
Scrape(General|Multi): Paginated Crawler
delete
Scrape(Sunbiz|Multi): Get Biz's By Zip
delete
Utility(Time): Test Load Speed
delete
Scrape(General|Single|NLP): Get Keyword Stats
delete
Scrape(General|Single): Get Text Near Links
delete
Utility(Event|Mouse): Press Down,Up, & Dragend
delete
Utility(Number): Between Range
delete
Utility(Event|Window): On Resize
delete
Scrape(Youtube|Single): Crawl Channel Videos
delete
Scrape(General|Multi): Tiny Link Crawler
delete
Utility(Time): Day of Week Report
delete
Utility(Number): Aspect Ratio Size Pairs
delete
Utility(Data): Sort Object Properties
delete
Scrape(General|Single): RiTa Sentences & Words
delete
Scrape(General|Single): Investigate Element Layers
delete
Scrape(NLP|Single): Using Compromise Plugins
delete
Utility(General): Remote Script Loader
delete
Scrape(General|Single|NLP): Compromise RiTa D3
delete
Scrape(General|Multi|Node): Grouped Node Crawler
delete
Scrape(Amazon|Multi): Crawl Product SERPs
delete
Scrape(Amazon|Multi): Get Paginated Brands
delete
Utility (Data): Download JSON in Browser
delete
Utility (Data): JSON AutoTypes
delete
Scrape(YouTube|Single): Video Page
delete
Utility (Text): Make Page Editable
delete
Utility (Text): Article Editor
delete
Scrape(General|Single|Text): Get Text On Click
delete
Utility (File): DnD File Parser (CSV,JSON,TXT)
delete
Scrape(General|Single): Get Links (Examples)
delete
Scrape(General|Single|Text): Get Sentences by Tag
delete
Utility (File): JSON to CSV via D3.js
delete
Scrape(General|Single): Auto Parse by Content Type
delete
Scrape(General|Single): Get Paragraphs & Sentences
delete
Scrape(Amazon|Multi): Get Reviews by ASIN
delete
Scrape(General|Single): Download Images on Page
delete
Utility(Event,Form): Custom Submit Function
delete
Utility (Fetch): Basic API Post Request
delete
Utility (Event,Form,Fetch): Form Data to API
delete
Utility (Time): Async Delay
delete
Utility (Time): Async Repeat Every N Secs
delete
Scrape(coj): Crawl Property SERPs
delete
Utility (Data): Promise Chain
delete
Utility (Fetch): Examples - JSON,Text,HTML
delete
Scrape(Amazon|Single): Product Review NLP
delete
Utility (Nodejs): Streaming Collections
delete
Scrape(Rate My Professor|Multi): Crawl Prof SERPs
delete
Utility (Time): JS Timer
delete
Utility (Text): Proper Case
delete
Scrape(Thingiverse API): Get Things via Search API
delete
Scrape(General|Single|Node): Get Node Attributes
delete
Scrape(General|Single|Node): Node Attributes + Text
delete
Scrape(Thesaurus): Get Words from SERPs
delete
Scrape(Walmart): Crawl Product SERPs
delete
Scrape(free3d): Crawl 3D Model SERPs
delete
Scrape(Aliexpress|Single): Get Products From SERP
delete
Scrape(simplify3d): Crawl Post SERPs
delete
Scrape(Twitter): Crawl Post Feed (infinite scroll)
delete
Scrape(DDuckGo|Single): Get Links from SERP
delete
Scrape(General|Single): Get Tokens String Distance
delete
Scrape(General|Single): Content Report
delete
Scrape(General|Single|Node): Node Recon (CSV)
delete
Utility (File): D3 JSON to CSV
delete
Scrape(coj|Multi): Crawl Property SERPs
delete
Scrape(coj|Single): sidenote
delete
Scrape(General|Single): Recursive Node Crawler
delete
Utility (Event,Window): Scroll to Root ScrollHeight
delete
Scrape(Indeed|Multi): Crawl Job SERPs
delete
Scrape(Thingiverse API): Get Things By Id
delete
Scrape(Thingiverse): Crawl Things by Category
delete
Scrape(Thingiverse API): Get Thing Batches by Id via DnD
delete
Scrape(YouTube|Single): Get Video Playlist
delete
Utility (Data): Join Thing Metrics & Meta
delete
Utility(Data): Get Nested Array Lengths
delete
Utility (Twitter): Hide Followed Profiles
delete
Utility (Time): YYYY-MM-DD HH:MM:SS
delete
Scrape(Thangs|Multi): Crawl 3D Model SERPs
delete
Scrape(PrusaPrints,Multi): Get Prints
delete
Scrape(Reddit,Single): Get Posts
delete
Userscript(Youtube): Scrape Channel Videos
delete
Userscript(Youtube): Tab Manager
delete
Scrape(Sunbiz|Multi): Biz Details
delete
Utility(Data):DnD View Types
delete
Scrape(General|Single|Node): Select Nodes by Attr
delete
Scrape(Aliexpress|Multi) Get Products via API
delete
Utility(Text): Strip Web Page CSS, Script, Events, Media
delete
Scrape(Youtube|Single) Get Subs
delete
Scrape(General|Single): SelectAll ReduceByProp
delete
Scrape(General|Single): SelectAll ReduceMultiProps
delete
Scrape(General|Multi): Tiny Link Crawler + Delay & Node Reports
delete
Scrape(P5|Multi): Get Examples
delete
Scrape(LinkedIn|Single): Find New Connections
delete
UserScript(linkedIn|Single) Get Jobs
delete
Utility (Time): Date From Days Ago
delete
Utility(General|Single) Keep Scrolling
delete
Scrape(YouTube) Videos From Search
delete
Utility(General|Single): getOffset
delete
Utility(Event,Form): Get Data On Form Input
delete
Utility(Event,Element): ResizeObserver
delete
COCO-SSD Object Categories
delete
Scrape(Wikipedia|Multi): What Links Here?
delete
Scrape(DDuckGo|Single): Download Images
delete
Scrape(General|Single|NLP): Compromise nGram
delete
Scrape(Amazon|Single): Product Review NLP
Edit Snippet
(() => { var options = { scripts: [ "https://unpkg.com/compromise", "https://cdnjs.cloudflare.com/ajax/libs/rita/1.3.94/rita-full.min.js" ] } const run = (options) => { var collection = []; var lib = { getAttributes:(el) => { try{ return [...el.attributes] .reduce((atts,att) => { atts[att.nodeName] = att.value return atts },{}) }catch(e){ return false; } }, getText:(el,clean=true) => { var text = el.innerText ? el.innerText : el.value ? el.value : el.content ? el.content : el.nodeValue ? el.nodeValue : ""; return clean ? text .replace(/\.+/gim,".") .replace(/\?+/gim,"?") .replace(/!+/gim,"!") .replace(/[ \t]+/gim," ") .replace(/[\n\r]+/gim,"\n").trim() : text; }, isValid: (text,obj) => Object.keys(obj).length || text.length, } var skipElements = ["[rel*='sheet']","[property]","body","head","html","script","style","noscript"].reduce((s,d) => s+=`:not(${d})`, ""); for (let el of document.querySelectorAll("[class*='review-text']"+skipElements)){ var obj = lib.getAttributes(el); var text = lib.getText(el); lib.isValid(obj,text) ? collection.push({ ...obj, text, nodeName: el.nodeName.toLowerCase(), children: el.childElementCount, textLength:text.length }) : null; } var set = new Set(); collection = collection.reduce((items,d) => { var prevLen = set.size; set.add(d.text); set.size > prevLen ? items.push(d) : null; return items; },[]); var nlpReport = { nouns:[], adjectives:[], verbs:[], adverbs:[], clauses:[], }; collection = collection.map(item => { let doc = nlp(item.text); item.sentences = doc.sentences().out('array').filter(s => s.length); item.filteredSentences = item.sentences.map(s => s .match(/[A-Z0-9][^\.!\?]{2,200}\.?( [a-z]+?\.+?)*((\w.){1,})?[^\.!\?][a-z]*[.?!]/gm)).filter(s => s); item.nouns = []; item.adjectives = []; item.verbs = []; item.adverbs = []; item.clauses = []; item.report = item.filteredSentences.map(s => { var obj = {}; let doc = nlp(s); obj.clauses = doc.clauses().out('array') let nouns = doc.nouns(); obj.nouns = nouns.normalize().out('array').filter(s => s.length) obj.adjectives = nouns.adjectives().normalize().out('array').filter(s => s.length) let verbs = doc.verbs(); obj.verbs = verbs.normalize().out('array').filter(s => s.length) obj.adverbs = verbs.adverbs().normalize({verbs:true,parentheses:true}).out('array').filter(s => s.length) item.nouns = [...item.nouns, ...obj.nouns] item.adjectives = [...item.adjectives, ...obj.adjectives] item.verbs = [...item.verbs, ...obj.verbs] item.adverbs = [...item.adverbs, ...obj.adverbs] item.clauses = [...item.clauses, ...obj.clauses] obj.sentence = s; return obj; }) nlpReport.nouns = [...nlpReport.nouns, ...item.nouns] nlpReport.adjectives = [...nlpReport.adjectives, ...item.adjectives] nlpReport.verbs = [...nlpReport.verbs, ...item.verbs] nlpReport.adverbs = [...nlpReport.adverbs, ...item.adverbs] nlpReport.clauses = [...nlpReport.clauses, ...item.clauses] delete item.text; return item; }) args = { ignoreCase: false, ignoreStopWords: true }; var sortObj = (obj,columns = []) => { return Object.entries(obj).sort(function(a, b) { return b[1] - a[1]; }) } nlpReport.wordCount = { nouns:sortObj(RiTa.concordance(nlpReport.nouns, null, args)), adjectives:sortObj(RiTa.concordance(nlpReport.adjectives, null, args)), verbs:sortObj(RiTa.concordance(nlpReport.verbs, null, args)), adverbs:sortObj(RiTa.concordance(nlpReport.adverbs, null, args)) } console.log({nlpReport,collection}) } const loadScripts = (scripts) => { var scriptCountdown = scripts.length; var loadScript = (url) => { var scriptsLoaded = () => { console.log("scriptsLoaded",{scriptCountdown}); scriptCountdown == 0 ? run(options) : null; return true; } console.log("loadScript",{url}) var imported = document.createElement('script'); imported.src = url; imported.addEventListener("load", () => { scriptCountdown--; scriptsLoaded(); }); document.head.appendChild(imported); } scripts.forEach(loadScript) } loadScripts(options.scripts); })()