<p><div><div><div><div data-show-faces="false" data-height="21" data-width="100" data-layout="button_count" data-send="true" data-href="https://www.r-bloggers.com/identify-analyze-web-site-tech-stacks-with-rappalyzer/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="https://rud.is/b/2017/09/30/identify-analyze-web-site-tech-stacks-with-rappalyzer/"> R – rud.is</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<p>Modern websites are complex beasts. They house photo galleries, interactive visualizations, web fonts, analytics code and other diverse types of content. Despite the potential for diversity, many web sites share similar “tech stacks” — the components that come together to make them what they are. These stacks consist of web servers (often with special capabilities), cache managers and a wide array of front-end web components. Unless a site goes to great lengths to cloak what they are using, most of these stack components leave a fingerprint — bits and pieces that we can piece together to identify them.</p>
<p><a rel="nofollow" href="https://wappalyzer.com/" target="_blank">Wappalyzer</a> is one tool that we can use to take these fingerprints and match them against a database of known components. If you’re not familiar with that service, go there now and enter in the URL of your own blog or company and come back to see why I’ve mentioned it.</p>
<p>Back? Good.</p>
<p>If you explored that site a bit, you likely saw a link to their <a rel="nofollow" href="https://github.com/AliasIO/Wappalyzer" target="_blank">GitHub repo</a>. There you’ll find JavaScript source code and even some browser plugins along with the core “fingerprint database”, <a rel="nofollow" href="https://github.com/AliasIO/Wappalyzer/blob/master/src/apps.json" target="_blank"><code>apps.json</code><img alt="🔗" src="https://s.w.org/images/core/emoji/2/72x72/1f517.png" class="wp-smiley"></a>. If you poke around on their repo, you’ll find the repo’s wiki and eventually see that folks have made various unofficial ports to <a rel="nofollow" href="https://github.com/AliasIO/Wappalyzer/wiki/Unofficial-drivers-and-ports" target="_blank">other languages</a>.</p>
<p>By now, you’ve likely guessed that this blog post is introducing an R port of “wappalyzer” and if you have made such a guess, you’re correct! The <a rel="nofollow" href="https://github.com/hrbrmstr/rappalyzer" target="_blank"><code>rappalyzer</code><img alt="🔗" src="https://s.w.org/images/core/emoji/2/72x72/1f517.png" class="wp-smiley"></a> package is a “work-in-progress” but it’s usable enough to get some feedback on the package API, solicit contributors and show some things you can do with it.</p>
<h3>Just rappalyze something already!</h3>
<p>For the moment, one real function is exposed: <code>rappalyze()</code>. Feed it a URL string or an <code>httr</code> <code>response</code> object and — if the analysis was fruitful — you’ll get back a data frame with all the identified tech stack components. Let’s see what <a rel="nofollow" href="http://jquery.com/" target="_blank"><code>jquery.com</code><img alt="🔗" src="https://s.w.org/images/core/emoji/2/72x72/1f517.png" class="wp-smiley"></a> is made of:</p>
<pre><code>devtools::install_github(&quot;hrbrmstr/rappalyzer&quot;)

library(rappalyzer)

rappalyze(&quot;https://jquery.com/&quot;)
## # A tibble: 8 x 5
##         tech              category match_type version confidence
##        </code></pre>