12. Web Scraping#

import requests
from bs4 import BeautifulSoup
import pandas as pd

Warning

If it says it cannot load one of the libraries, use pip inside your notebook to install, then restart your kernel (Kernel menu, choose restart)

pip install beautifulsoup4

We have that read_html can get content from an actual website, not a data file that is hosted somewhere on the internet, that takes tables on a website and returns a list of DataFrames.

12.1. Everything is Data#

For the purpose of this class, it is best to think of the content on a web page like a datastructure.

html anatomy

HTML tree structure

there are tags <> that define the structure, and these can be further classified with classes

12.2. Scraping a URI website#

We’re going to create a DataFrame about URI CS & Statistics Faculty.

from the people page of the department website.

We can inspect the page to check that it’s well structured

Warning

With great power comes great responsibility.

  • always check the robots.txt

  • do not do things that the owner says not to do

  • government websites are typically safe

We’lls ave the URL for easy use

cs_people_url = 'https://web.uri.edu/cs/people/'

Then we can use the requests library to make a call to the internet. It actually gets back a response object which has a lot of extra information. For today we only need the content from the page which is an attrtibute of that object

cs_people_html = requests.get(cs_people_url).content

This is raw:

type(cs_people_html)
bytes
cs_people_html
b'\n<!DOCTYPE html>\n<html lang="en-US">\n\t\n<head>\n<meta charset="UTF-8"><script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"1103161638",accountID:"3574023",trustKey:"66686",xpid:"VwMAVVZRCxABVFBXAwUOV1EH",licenseKey:"NRJS-efb76a2da79a549a60d",applicationID:"1015449156"};/*! For license information please see nr-loader-spa-1220.min.js.LICENSE.txt */\n!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.NRBA=t():e.NRBA=t()}(self,(function(){return function(){var e,t,n={9034:function(e,t,n){"use strict";var r=n(4168);t.Z=(0,r.ky)(16)},5973:function(e,t,n){"use strict";n.d(t,{I:function(){return r}});var r=0,o=navigator.userAgent.match(/Firefox[\\/\\s](\\d+\\.\\d+)/);o&&(r=+o[1])},4280:function(e,t,n){"use strict";n.d(t,{H:function(){return o}});var r=document.createElement("div");r.innerHTML="\\x3c!--[if lte IE 6]><div></div><![endif]--\\x3e\\x3c!--[if lte IE 7]><div></div><![endif]--\\x3e\\x3c!--[if lte IE 8]><div></div><![endif]--\\x3e\\x3c!--[if lte IE 9]><div></div><![endif]--\\x3e";var o,i=r.getElementsByTagName("div").length;o=4===i?6:3===i?7:2===i?8:1===i?9:0},5955:function(e,t,n){"use strict";n.d(t,{I:function(){return r}});var r=function(e,t){var n=this;return e&&"object"==typeof e?t&&"object"==typeof t?(Object.assign(this,t),void Object.entries(e).forEach((function(e){var t=e[0],r=e[1];n[t]=r}))):console.error("setting a Configurable requires a model to set its initial properties"):console.error("setting a Configurable requires an object as input")}},441:function(e,t,n){"use strict";n.d(t,{C:function(){return c},L:function(){return u}});var r=n(1424),o=n(5955),i={beacon:r.ce.beacon,errorBeacon:r.ce.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for "+e+" was never set");return a[e]}function u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=new o.I(t,i),(0,r.Qy)(e,a[e],"info")}},1476:function(e,t,n){"use strict";n.d(t,{Dg:function(){return u},Mt:function(){return s},P_:function(){return c}});var r=n(1424),o=n(5955),i={privacy:{cookies_enabled:!0},ajax:{deny_list:void 0,enabled:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},ssl:void 0,obfuscate:void 0,jserrors:{enabled:!0},metrics:{enabled:!0},page_action:{enabled:!0},page_view_event:{enabled:!0},page_view_timing:{enabled:!0},session_trace:{enabled:!0},spa:{enabled:!0}},a={};function c(e){if(!e)throw new Error("All configuration objects require an agent identifier!");if(!a[e])throw new Error("Configuration for "+e+" was never set");return a[e]}function u(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");a[e]=new o.I(t,i),(0,r.Qy)(e,a[e],"config")}function s(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");var n=c(e);if(n){for(var r=t.split("."),o=0;o<r.length-1;o++)if("object"!=typeof(n=n[r[o]]))return;n=n[r[r.length-1]]}return n}},2085:function(e,t,n){"use strict";n.d(t,{Y:function(){return r}});var r=(0,n(1424).mF)().o},1220:function(e,t,n){"use strict";n.d(t,{O:function(){return w},s:function(){return O}});var r={};n.r(r),n.d(r,{agent:function(){return a},match:function(){return f},version:function(){return c}});var o=n(4280),i=n(6959),a=null,c=null;if(navigator.userAgent){var u=navigator.userAgent,s=u.match(/Version\\/(\\S+)\\s+Safari/);s&&-1===u.indexOf("Chrome")&&-1===u.indexOf("Chromium")&&(a="Safari",c=s[1])}function f(e,t){if(!a)return!1;if(e!==a)return!1;if(!t)return!0;if(!c)return!1;for(var n=c.split("."),r=t.split("."),o=0;o<r.length;o++)if(r[o]!==n[o])return!1;return!0}var d=n(5955),l=n(1424),p=n(4168),h=window.sessionStorage,v="NRBA_SESSION_ID";var m=n(1476),g=window.XMLHttpRequest,y=g&&g.prototype,b={};function w(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!b[e])throw new Error("Runtime for "+e+" was never set");return b[e]}function O(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");var n,a;b[e]=new d.I(t,(n=e,{customTransaction:void 0,disabled:!1,features:{},maxBytes:6===o.H?2e3:3e4,offset:(0,i.yf)(),onerror:void 0,origin:""+window.location,ptid:void 0,releaseIds:{},sessionId:!0===(0,m.Mt)(n,"privacy.cookies_enabled")?(null===(a=h.getItem(v))&&(a=(0,p.ky)(16),h.setItem(v,a)),a):"0",xhrWrappable:g&&y&&y.addEventListener&&!/CriOS/.test(navigator.userAgent),userAgent:r})),(0,l.Qy)(e,b[e],"runtime")}},158:function(e,t,n){"use strict";n.d(t,{q:function(){return r}});var r=["1220","PROD"].filter((function(e){return e})).join(".")},3707:function(e,t,n){"use strict";n.d(t,{w:function(){return o}});var r={agentIdentifier:""},o=function(e){var t=this;if("object"!=typeof e)return console.error("shared context requires an object as input");this.sharedContext={},Object.assign(this.sharedContext,r),Object.entries(e).forEach((function(e){var n=e[0],o=e[1];Object.keys(r).includes(n)&&(t.sharedContext[n]=o)}))}},1776:function(e,t,n){"use strict";n.d(t,{c:function(){return f},ee:function(){return r}});var r,o=n(1424),i=n(4217),a=n(357),c="nr@context",u=(0,o.fP)();function s(){}function f(e){return(0,i.X)(e,c,d)}function d(){return new s}function l(){(r.backlog.api||r.backlog.feature)&&(r.aborted=!0,r.backlog={})}u.ee?r=u.ee:(r=function e(t,n){var o={},u={},f={},p={on:m,addEventListener:m,removeEventListener:g,emit:v,get:b,listeners:y,context:h,buffer:w,abort:l,aborted:!1,isBuffering:O,debugId:n,backlog:t&&t.backlog?t.backlog:{}};return p;function h(e){return e&&e instanceof s?e:e?(0,i.X)(e,c,d):d()}function v(e,n,o,i,a){if(!1!==a&&(a=!0),!r.aborted||i){t&&a&&t.emit(e,n,o);for(var c=h(o),s=y(e),f=s.length,d=0;d<f;d++)s[d].apply(c,n);var l=x()[u[e]];return l&&l.push([p,e,n,c]),c}}function m(e,t){o[e]=y(e).concat(t)}function g(e,t){var n=o[e];if(n)for(var r=0;r<n.length;r++)n[r]===t&&n.splice(r,1)}function y(e){return o[e]||[]}function b(t){return f[t]=f[t]||e(p,t)}function w(e,t){var n=x();p.aborted||(0,a.D)(e,(function(e,r){t=t||"feature",u[r]=t,t in n||(n[t]=[])}))}function O(e){return!!x()[u[e]]}function x(){return p.backlog}}(void 0,"globalEE"),u.ee=r)},7361:function(e,t,n){"use strict";n.d(t,{E:function(){return r},p:function(){return o}});var r=n(1776).ee.get("handle");function o(e,t,n,o,i){i?(i.buffer([e],o),i.emit(e,t,n)):(r.buffer([e],o),r.emit(e,t,n))}},3350:function(e,t,n){"use strict";n.d(t,{X:function(){return i}});var r=n(7361);i.on=a;var o=i.handlers={};function i(e,t,n,i){a(i||r.E,o,e,t,n)}function a(e,t,n,o,i){i||(i="feature"),e||(e=r.E);var a=t[i]=t[i]||{};(a[n]=a[n]||[]).push([e,o])}},4408:function(e,t,n){"use strict";n.d(t,{m:function(){return i}});var r=!1;try{var o=Object.defineProperty({},"passive",{get:function(){r=!0}});window.addEventListener("testPassive",null,o),window.removeEventListener("testPassive",null,o)}catch(e){}function i(e){return r?{passive:!0,capture:!!e}:!!e}},4168:function(e,t,n){"use strict";function r(){var e=null,t=0,n=window.crypto||window.msCrypto;function r(){return e?15&e[t++]:16*Math.random()|0}n&&n.getRandomValues&&(e=n.getRandomValues(new Uint8Array(31)));for(var o,i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",a="",c=0;c<i.length;c++)a+="x"===(o=i[c])?r().toString(16):"y"===o?(o=3&r()|8).toString(16):o;return a}function o(){return a(16)}function i(){return a(32)}function a(e){var t=null,n=0,r=window.crypto||window.msCrypto;r&&r.getRandomValues&&Uint8Array&&(t=r.getRandomValues(new Uint8Array(31)));for(var o=[],i=0;i<e;i++)o.push(a().toString(16));return o.join("");function a(){return t?15&t[n++]:16*Math.random()|0}}n.d(t,{Ht:function(){return i},M:function(){return o},Rl:function(){return r},ky:function(){return a}})},6959:function(e,t,n){"use strict";n.d(t,{nb:function(){return u},os:function(){return s},yf:function(){return c},zO:function(){return a}});var r=n(2364),o=(new Date).getTime(),i=o;function a(){return r.G&&performance.now?Math.round(performance.now()):(o=Math.max((new Date).getTime(),o))-i}function c(){return o}function u(e){i=e}function s(){return i}},2364:function(e,t,n){"use strict";n.d(t,{G:function(){return r}});var r=void 0!==window.performance&&window.performance.timing&&void 0!==window.performance.timing.navigationStart},1793:function(e,t,n){"use strict";function r(e){var t,n=0;for(t=0;t<e.length;t++)n+=(t+1)*e.charCodeAt(t);return Math.abs(n)}n.d(t,{v:function(){return s},s:function(){return u}});var o=n(6972),i=n(5973),a=n(6959),c=n(2364),u=!0;function s(e){var t=function(){if(i.I&&i.I<9)return;if(c.G)return u=!1,window.performance.timing.navigationStart}()||function(){for(var e=document.cookie.split(" "),t=0;t<e.length;t++)if(0===e[t].indexOf("NREUM=")){for(var n,o,i,a,c=e[t].substring("NREUM=".length).split("&"),u=0;u<c.length;u++)0===c[u].indexOf("s=")?i=c[u].substring(2):0===c[u].indexOf("p=")?";"===(o=c[u].substring(2)).charAt(o.length-1)&&(o=o.substr(0,o.length-1)):0===c[u].indexOf("r=")&&";"===(n=c[u].substring(2)).charAt(n.length-1)&&(n=n.substr(0,n.length-1));if(n){var s=r(document.referrer);(a=s==n)||(a=r(document.location.href)==n&&s==o)}if(a&&i){if((new Date).getTime()-i>6e4)return;return i}}}();t&&((0,o.B)(e,"starttime",t),(0,a.nb)(t))}},6972:function(e,t,n){"use strict";n.d(t,{B:function(){return i},L:function(){return a}});var r=n(6959),o={};function i(e,t,n){void 0===n&&(n=(0,r.zO)()+(0,r.os)()),o[e]=o[e]||{},o[e][t]=n}function a(e,t,n,r){var i,a,c=e.sharedContext.agentIdentifier,u=null==(i=o[c])?void 0:i[n],s=null==(a=o[c])?void 0:a[r];void 0!==u&&void 0!==s&&e.store("measures",t,{value:s-u})}},7001:function(e,t,n){"use strict";n.d(t,{e:function(){return o}});var r={};function o(e){if(e in r)return r[e];if(0===(e||"").indexOf("data:"))return{protocol:"data"};var t=document.createElement("a"),n=window.location,o={};t.href=e,o.port=t.port;var i=t.href.split("://");!o.port&&i[1]&&(o.port=i[1].split("/")[0].split("@").pop().split(":")[1]),o.port&&"0"!==o.port||(o.port="https"===i[0]?"443":"80"),o.hostname=t.hostname||n.hostname,o.pathname=t.pathname,o.protocol=i[0],"/"!==o.pathname.charAt(0)&&(o.pathname="/"+o.pathname);var a=!t.protocol||":"===t.protocol||t.protocol===n.protocol,c=t.hostname===document.domain&&t.port===n.port;return o.sameOrigin=a&&(!t.hostname||c),"/"===o.pathname&&(r[e]=o),o}},7299:function(e,t,n){"use strict";n.d(t,{T:function(){return a}});var r=window,o=r;function i(){return o}var a={isFileProtocol:function(){var e=i(),t=!(!e.location||!e.location.protocol||"file:"!==e.location.protocol);t&&(a.supportabilityMetricSent=!0);return t},supportabilityMetricSent:!1}},847:function(e,t,n){"use strict";n.d(t,{K:function(){return a}});var r=n(1220),o=n(1476),i=["ajax","jserrors","metrics","page_action","page_view_event","page_view_timing","session_trace","spa"];function a(e){var t={};return i.forEach((function(n){t[n]=function(e,t){return!0!==(0,r.O)(t).disabled&&!1!==(0,o.Mt)(t,e+".enabled")}(n,e)})),t}},5023:function(e,t,n){"use strict";n.d(t,{W:function(){return o}});var r=n(1776),o=function(e,t,n){void 0===n&&(n=[]),this.agentIdentifier=e,this.aggregator=t,this.ee=r.ee.get(e),this.externalFeatures=n}},4217:function(e,t,n){"use strict";n.d(t,{X:function(){return o}});var r=Object.prototype.hasOwnProperty;function o(e,t,n){if(r.call(e,t))return e[t];var o=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:o,writable:!0,enumerable:!1}),o}catch(e){}return e[t]=o,o}},357:function(e,t,n){"use strict";n.d(t,{D:function(){return o}});var r=Object.prototype.hasOwnProperty;function o(e,t){var n=[],o="",i=0;for(o in e)r.call(e,o)&&(n[i]=t(o,e[o]),i+=1);return n}},603:function(e,t,n){"use strict";n.d(t,{$c:function(){return s},Ng:function(){return f},RR:function(){return u}});var r=n(1476),o=n(3707),i=n(7299);function a(e,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},a(e,t)}var c={regex:/^file:\\/\\/(.*)/,replacement:"file://OBFUSCATED"},u=function(e){var t,n;function r(t){return e.call(this,t)||this}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var o=r.prototype;return o.shouldObfuscate=function(){return s(this.sharedContext.agentIdentifier).length>0},o.obfuscateString=function(e){if(!e||"string"!=typeof e)return e;for(var t=s(this.sharedContext.agentIdentifier),n=e,r=0;r<t.length;r++){var o=t[r].regex,i=t[r].replacement||"*";n=n.replace(o,i)}return n},r}(o.w);function s(e){var t=[],n=(0,r.Mt)(e,"obfuscate")||[];return t=t.concat(n),i.T.isFileProtocol()&&t.push(c),t}function f(e){for(var t=!1,n=!1,r=0;r<e.length;r++){"regex"in e[r]?"string"!=typeof e[r].regex&&e[r].regex.constructor!==RegExp&&(console&&console.warn&&console.warn(\'An obfuscation replacement rule contains a "regex" value with an invalid type (must be a string or RegExp)\'),n=!0):(console&&console.warn&&console.warn(\'An obfuscation replacement rule was detected missing a "regex" value.\'),n=!0);var o=e[r].replacement;o&&"string"!=typeof o&&(console&&console.warn&&console.warn(\'An obfuscation replacement rule contains a "replacement" value with an invalid type (must be a string)\'),t=!0)}return!t&&!n}},1424:function(e,t,n){"use strict";n.d(t,{EZ:function(){return u},Qy:function(){return c},ce:function(){return o},fP:function(){return i},gG:function(){return s},mF:function(){return a}});var r=n(6959),o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function i(){return window.NREUM||(window.NREUM={}),void 0===window.newrelic&&(window.newrelic=window.NREUM),window.NREUM}function a(){var e=i();if(!e.o){var t=window,n=t.XMLHttpRequest;e.o={ST:setTimeout,SI:t.setImmediate,CT:clearTimeout,XHR:n,REQ:t.Request,EV:t.Event,PR:t.Promise,MO:t.MutationObserver,FETCH:t.fetch}}return e}function c(e,t,n){var o,a,c=i(),u=c.initializedAgents||{},s=u[e]||{};return Object.keys(s).length||(s.initializedAt={ms:(0,r.zO)(),date:new Date}),c.initializedAgents=Object.assign({},u,((a={})[e]=Object.assign({},s,((o={})[n]=t,o)),a)),c}function u(e,t){i()[e]=t}function s(){var e,t;return e=i(),t=e.info||{},e.info=Object.assign({beacon:o.beacon,errorBeacon:o.errorBeacon},t),function(){var e=i(),t=e.init||{};e.init=Object.assign({},t)}(),a(),function(){var e=i(),t=e.loader_config||{};e.loader_config=Object.assign({},t)}(),i()}},5098:function(e,t,n){"use strict";function r(){return"PerformanceObserver"in window&&"function"==typeof window.PerformanceObserver}n.d(t,{W:function(){return r}})},8539:function(e){e.exports=function(e,t,n){t||(t=0),void 0===n&&(n=e?e.length:0);for(var r=-1,o=n-t||0,i=Array(o<0?0:o);++r<o;)i[r]=e[t+r];return i}},8118:function(e){e.exports=function(e,t,n){t||(t=0),void 0===n&&(n=e?e.length:0);for(var r=-1,o=n-t||0,i=Array(o<0?0:o);++r<o;)i[r]=e[t+r];return i}}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var i=r[e]={exports:{}};return n[e](i,i.exports,o),i.exports}o.m=n,o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},o.d=function(e,t){for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.f={},o.e=function(e){return Promise.all(Object.keys(o.f).reduce((function(t,n){return o.f[n](e,t),t}),[]))},o.u=function(e){return e+"."+o.h().slice(0,8)+"-1220.js"},o.h=function(){return"2d6a2503b7f18a5b77dd"},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},e={},t="NRBA:",o.l=function(n,r,i,a){if(e[n])e[n].push(r);else{var c,u;if(void 0!==i)for(var s=document.getElementsByTagName("script"),f=0;f<s.length;f++){var d=s[f];if(d.getAttribute("src")==n||d.getAttribute("data-webpack")==t+i){c=d;break}}c||(u=!0,(c=document.createElement("script")).charset="utf-8",c.timeout=120,o.nc&&c.setAttribute("nonce",o.nc),c.setAttribute("data-webpack",t+i),c.src=n),e[n]=[r];var l=function(t,r){c.onerror=c.onload=null,clearTimeout(p);var o=e[n];if(delete e[n],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((function(e){return e(r)})),t)return t(r)},p=setTimeout(l.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=l.bind(null,c.onerror),c.onload=l.bind(null,c.onload),u&&document.head.appendChild(c)}},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.p="https://js-agent.newrelic.com/",function(){var e={997:0,898:0};o.f.j=function(t,n){var r=o.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var i=new Promise((function(n,o){r=e[t]=[n,o]}));n.push(r[2]=i);var a=o.p+o.u(t),c=new Error;o.l(a,(function(n){if(o.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var i=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;c.message="Loading chunk "+t+" failed.\\n("+i+": "+a+")",c.name="ChunkLoadError",c.type=i,c.request=a,r[1](c)}}),"chunk-"+t,t)}};var t=function(t,n){var r,i,a=n[0],c=n[1],u=n[2],s=0;if(a.some((function(t){return 0!==e[t]}))){for(r in c)o.o(c,r)&&(o.m[r]=c[r]);if(u)u(o)}for(t&&t(n);s<a.length;s++)i=a[s],o.o(e,i)&&e[i]&&e[i][0](),e[i]=0},n=self.webpackChunkNRBA=self.webpackChunkNRBA||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}();var i={};return function(){"use strict";o.r(i);var e=o(4408),t=window,n=t.document;function r(e){"complete"===n.readyState&&e()}function a(o){r(o),n.addEventListener?t.addEventListener("load",o,(0,e.m)(!1)):t.attachEvent("onload",o)}function c(t){r(t),n.addEventListener?n.addEventListener("DOMContentLoaded",t,(0,e.m)(!1)):n.attachEvent("onreadystatechange",r)}var u=o(1776);function s(){s=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof l?t:l,i=Object.create(o.prototype),a=new j(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return _()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var c=O(a,n);if(c){if(c===d)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=f(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===d)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,a),i}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var d={};function l(){}function p(){}function h(){}var v={};c(v,o,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(P([])));g&&g!==t&&n.call(g,o)&&(v=g);var y=h.prototype=l.prototype=Object.create(v);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,c){var u=f(e[o],e,i);if("throw"!==u.type){var s=u.arg,d=s.value;return d&&"object"==typeof d&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,a,c)}),(function(e){r("throw",e,a,c)})):t.resolve(d).then((function(e){s.value=e,a(s)}),(function(e){return r("throw",e,a,c)}))}c(u.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function O(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method))return d;t.method="throw",t.arg=new TypeError("The iterator does not provide a \'throw\' method")}return d}var r=f(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,d;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function P(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:_}}function _(){return{value:void 0,done:!0}}return p.prototype=h,c(y,"constructor",h),c(h,"constructor",p),p.displayName=c(h,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,c(e,a,"GeneratorFunction")),e.prototype=Object.create(y),e},e.awrap=function(e){return{__await:e}},b(w.prototype),c(w.prototype,i,(function(){return this})),e.AsyncIterator=w,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new w(u(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},b(y),c(y,a,"Generator"),c(y,o,(function(){return this})),c(y,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=P,j.prototype={constructor:j,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,d):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:P(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),d}},e}function f(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}var d=0;function l(e){var t;(t=s().mark((function t(){var n,r;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!d++){t.next=2;break}return t.abrupt("return");case 2:return t.prev=2,t.next=5,o.e(552).then(o.bind(o,5552));case 5:return n=t.sent,r=n.aggregator,t.next=9,r(e);case 9:t.next=15;break;case 11:t.prev=11,t.t0=t.catch(2),console.error("Failed to successfully load all aggregators. Aborting...\\n",t.t0),u.ee.abort();case 15:case"end":return t.stop()}}),t,null,[[2,11]])})),function(){var e=this,n=arguments;return new Promise((function(r,o){var i=t.apply(e,n);function a(e){f(i,r,o,a,c,"next",e)}function c(e){f(i,r,o,a,c,"throw",e)}a(void 0)}))})()}var p=o(9034),h=o(7361),v=o(6959),m=o(6972),g=o(1793),y=o(5023);function b(e,t){return b=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},b(e,t)}var w,O,x,E=function(e){var t,n;function r(t){var n;return n=e.call(this,t)||this,(0,g.v)(t),(0,m.B)(t,"firstbyte",(0,v.yf)()),a((function(){return n.measureWindowLoaded()})),c((function(){return n.measureDomContentLoaded()})),n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,b(t,n);var o=r.prototype;return o.measureWindowLoaded=function(){var e=(0,v.zO)();(0,m.B)(this.agentIdentifier,"onload",e+(0,v.os)()),(0,h.p)("timing",["load",e],void 0,void 0,this.ee)},o.measureDomContentLoaded=function(){(0,m.B)(this.agentIdentifier,"domContent",(0,v.zO)()+(0,v.os)())},r}(y.W);void 0!==document.hidden?(w="hidden",O="visibilitychange",x="visibilityState"):void 0!==document.msHidden?(w="msHidden",O="msvisibilitychange"):void 0!==document.webkitHidden&&(w="webkitHidden",O="webkitvisibilitychange",x="webkitVisibilityState");var j=o(1476),P=o(2085);function _(e,t){return _=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},_(e,t)}var L=function(t){var n,r;function o(n){var r,o;if((r=t.call(this,n)||this).pageHiddenTime="hidden"===document.visibilityState?-1:1/0,r.performanceObserver,r.lcpPerformanceObserver,r.clsPerformanceObserver,r.fiRecorded=!1,!r.isEnabled())return function(e){if(void 0===e)throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");return e}(r);if("PerformanceObserver"in window&&"function"==typeof window.PerformanceObserver){r.performanceObserver=new PerformanceObserver((function(){var e;return(e=r).perfObserver.apply(e,arguments)}));try{r.performanceObserver.observe({entryTypes:["paint"]})}catch(e){}r.lcpPerformanceObserver=new PerformanceObserver((function(){var e;return(e=r).lcpObserver.apply(e,arguments)}));try{r.lcpPerformanceObserver.observe({entryTypes:["largest-contentful-paint"]})}catch(e){}r.clsPerformanceObserver=new PerformanceObserver((function(){var e;return(e=r).clsObserver.apply(e,arguments)}));try{r.clsPerformanceObserver.observe({type:"layout-shift",buffered:!0})}catch(e){}}if("addEventListener"in document){r.fiRecorded=!1;["click","keydown","mousedown","pointerdown","touchstart"].forEach((function(t){document.addEventListener(t,(function(){var e;return(e=r).captureInteraction.apply(e,arguments)}),(0,e.m)(!1))}))}return o=function(){var e;return(e=r).captureVisibilityChange.apply(e,arguments)},"addEventListener"in document&&O&&document.addEventListener(O,(function(){x&&document[x]?o(document[x]):document[w]?o("hidden"):o("visible")}),(0,e.m)(!1)),r}r=t,(n=o).prototype=Object.create(r.prototype),n.prototype.constructor=n,_(n,r);var i=o.prototype;return i.isEnabled=function(){return!1!==(0,j.Mt)(this.agentIdentifier,"page_view_timing.enabled")},i.perfObserver=function(e,t){var n=this;e.getEntries().forEach((function(e){"first-paint"===e.name?(0,h.p)("timing",["fp",Math.floor(e.startTime)],void 0,void 0,n.ee):"first-contentful-paint"===e.name&&(0,h.p)("timing",["fcp",Math.floor(e.startTime)],void 0,void 0,n.ee)}))},i.lcpObserver=function(e,t){var n=e.getEntries();if(n.length>0){var r=n[n.length-1];if(this.pageHiddenTime<r.startTime)return;var o=[r],i=this.addConnectionAttributes({});i&&o.push(i),(0,h.p)("lcp",o,void 0,void 0,this.ee)}},i.clsObserver=function(e){var t=this;e.getEntries().forEach((function(e){e.hadRecentInput||(0,h.p)("cls",[e],void 0,void 0,t.ee)}))},i.addConnectionAttributes=function(e){var t=navigator.connection||navigator.mozConnection||navigator.webkitConnection;if(t)return t.type&&(e["net-type"]=t.type),t.effectiveType&&(e["net-etype"]=t.effectiveType),t.rtt&&(e["net-rtt"]=t.rtt),t.downlink&&(e["net-dlink"]=t.downlink),e},i.captureInteraction=function(e){if(e instanceof P.Y.EV&&!this.fiRecorded){var t=Math.round(e.timeStamp),n={type:e.type};this.addConnectionAttributes(n),t<=(0,v.zO)()?n.fid=(0,v.zO)()-t:t>(0,v.os)()&&t<=Date.now()?(t-=(0,v.os)(),n.fid=(0,v.zO)()-t):t=(0,v.zO)(),this.fiRecorded=!0,(0,h.p)("timing",["fi",t,n],void 0,void 0,this.ee)}},i.captureVisibilityChange=function(e){"hidden"===e&&(this.pageHiddenTime=(0,v.zO)(),(0,h.p)("pageHide",[this.pageHiddenTime],void 0,void 0,this.ee))},o}(y.W),T=o(3350),C="React",S="Angular",I="AngularJS",R="Backbone",k="Ember",A="Vue",H="Meteor",N="Zepto",z="Jquery";function M(){var e=[];try{(function(){try{if(window.React||window.ReactDOM||window.ReactRedux)return!0;if(document.querySelector("[data-reactroot], [data-reactid]"))return!0;for(var e=document.querySelectorAll("body > div"),t=0;t<e.length;t++)if(Object.keys(e[t]).indexOf("_reactRootContainer")>=0)return!0;return!1}catch(e){return!1}})()&&e.push(C),function(){try{return!!window.angular||(!!document.querySelector(".ng-binding, [ng-app], [data-ng-app], [ng-controller], [data-ng-controller], [ng-repeat], [data-ng-repeat]")||!!document.querySelector(\'script[src*="angular.js"], script[src*="angular.min.js"]\'))}catch(e){return!1}}()&&e.push(I),function(){try{return!!(window.hasOwnProperty("ng")&&window.ng.hasOwnProperty("coreTokens")&&window.ng.coreTokens.hasOwnProperty("NgZone"))||!!document.querySelectorAll("[ng-version]").length}catch(e){return!1}}()&&e.push(S),window.Backbone&&e.push(R),window.Ember&&e.push(k),window.Vue&&e.push(A),window.Meteor&&e.push(H),window.Zepto&&e.push(N),window.jQuery&&e.push(z)}catch(e){}return e}var D=o(7299),q=o(603),B=o(158);function F(e,t){return F=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},F(e,t)}var G=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).singleChecks(),(0,T.X)("record-supportability",(function(){var e;return(e=n).recordSupportability.apply(e,arguments)}),void 0,n.ee),(0,T.X)("record-custom",(function(){var e;return(e=n).recordCustom.apply(e,arguments)}),void 0,n.ee),n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,F(t,n);var o=r.prototype;return o.recordSupportability=function(e,t){var n=["sm",e,{name:e},t];return(0,h.p)("storeMetric",n,null,void 0,this.ee),n},o.recordCustom=function(e,t){var n=["cm",e,{name:e},t];return(0,h.p)("storeEventMetrics",n,null,void 0,this.ee),n},o.singleChecks=function(){var e=this;this.recordSupportability("Generic/Version/"+B.q+"/Detected"),c((function(){M().forEach((function(t){e.recordSupportability("Framework/"+t+"/Detected")}))})),D.T.isFileProtocol()&&(this.recordSupportability("Generic/FileProtocol/Detected"),D.T.supportabilityMetricSent=!0);var t=(0,q.$c)(this.agentIdentifier);t.length>0&&this.recordSupportability("Generic/Obfuscate/Detected"),t.length>0&&!(0,q.Ng)(t)&&this.recordSupportability("Generic/Obfuscate/Invalid")},r}(y.W),U=o(1220),X=o(4217),Z=o(8118),W=o.n(Z),V=o(357),Y=window,Q="fetch-",K="fetch-body-",J=["arrayBuffer","blob","json","text","formData"],$=Y.Request,ee=Y.Response,te="prototype",ne="nr@context",re={};function oe(e){var t=function(e){return(e||u.ee).get("fetch")}(e);if(!($&&ee&&window.fetch))return t;if(re[t.debugId])return t;function n(e,n,r){var o=e[n];"function"==typeof o&&(e[n]=function(){var e,n=W()(arguments),i={};t.emit(r+"before-start",[n],i),i[ne]&&i[ne].dt&&(e=i[ne].dt);var a=o.apply(this,n);return t.emit(r+"start",[n,e],a),a.then((function(e){return t.emit(r+"end",[null,e],a),e}),(function(e){throw t.emit(r+"end",[e],a),e}))})}return re[t.debugId]=!0,(0,V.D)(J,(function(e,t){n($[te],t,K),n(ee[te],t,K)})),n(Y,"fetch",Q),t.on("fetch-end",(function(e,n){var r=this;if(n){var o=n.headers.get("content-length");null!==o&&(r.rxSize=o),t.emit("fetch-done",[null,n],r)}else t.emit("fetch-done",[e],r)})),t}var ie="nr@original",ae=Object.prototype.hasOwnProperty,ce=!1;function ue(e,t){return e||(e=u.ee),n.inPlace=function(e,t,r,o,i){r||(r="");var a,c,u,s="-"===r.charAt(0);for(u=0;u<t.length;u++)c=t[u],de(a=e[c])||(e[c]=n(a,s?c+r:r,o,c,i))},n.flag=ie,n;function n(t,n,o,i,a){return de(t)?t:(n||(n=""),c[ie]=t,fe(t,c,e),c);function c(){var c,u,s,f;try{u=this,c=W()(arguments),s="function"==typeof o?o(c,u):o||{}}catch(t){se([t,"",[c,u,i],s],e)}r(n+"start",[c,u,i],s,a);try{return f=t.apply(u,c)}catch(e){throw r(n+"err",[c,u,e],s,a),e}finally{r(n+"end",[c,u,f],s,a)}}}function r(n,r,o,i){if(!ce||t){var a=ce;ce=!0;try{e.emit(n,r,o,t,i)}catch(t){se([t,n,r,o],e)}ce=a}}}function se(e,t){t||(t=u.ee);try{t.emit("internal-error",e)}catch(e){}}function fe(e,t,n){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(n){Object.defineProperty(t,n,{get:function(){return e[n]},set:function(t){return e[n]=t,t}})})),t}catch(e){se([e],n)}for(var r in e)ae.call(e,r)&&(t[r]=e[r]);return t}function de(e){return!(e&&e instanceof Function&&e.apply&&!e[ie])}function le(e,t,n){var r=e[t];e[t]=function(e,t){var n=t(e);return n[ie]=e,fe(e,n,u.ee),n}(r,n)}function pe(){for(var e=arguments.length,t=new Array(e),n=0;n<e;++n)t[n]=arguments[n];return t}var he={};function ve(e){var t=function(e){return(e||u.ee).get("timer")}(e);if(he[t.debugId])return t;he[t.debugId]=!0;var n=ue(t),r="setTimeout",o="setInterval",i="clearTimeout",a="-start";return n.inPlace(window,[r,"setImmediate"],"setTimeout-"),n.inPlace(window,[o],"setInterval-"),n.inPlace(window,[i,"clearImmediate"],"clearTimeout-"),t.on(o+a,(function(e,t,r){e[0]=n(e[0],"fn-",null,r)})),t.on(r+a,(function(e,t,r){this.method=r,this.timerDuration=isNaN(e[1])?0:+e[1],e[0]=n(e[0],"fn-",this,r)})),t}var me={};function ge(e){var t=function(e){return(e||u.ee).get("raf")}(e);if(me[t.debugId])return t;me[t.debugId]=!0;var n=ue(t);return n.inPlace(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame"],"raf-"),t.on("raf-start",(function(e){e[0]=n(e[0],"fn-")})),t}var ye={};function be(e){var t=function(e){return(e||u.ee).get("history")}(e);if(ye[t.debugId])return t;ye[t.debugId]=!0;var n=ue(t),r=window.history&&window.history.constructor&&window.history.constructor.prototype,o=window.history;return r&&r.pushState&&r.replaceState&&(o=r),n.inPlace(o,["pushState","replaceState"],"-"),t}var we={};function Oe(t){var n=function(e){return(e||u.ee).get("jsonp")}(t);if(we[n.debugId])return n;we[n.debugId]=!0;var r=ue(n),o=/[?&](?:callback|cb)=([^&#]+)/,i=/(.*)\\.([^.]+)/,a=/^(\\w+)(\\.|$)(.*)$/,c=["appendChild","insertBefore","replaceChild"];function s(e,t){var n=e.match(a),r=n[1],o=n[3];return o?s(o,t[r]):t[r]}return"addEventListener"in window&&(Node&&Node.prototype&&Node.prototype.appendChild?r.inPlace(Node.prototype,c,"dom-"):(r.inPlace(HTMLElement.prototype,c,"dom-"),r.inPlace(HTMLHeadElement.prototype,c,"dom-"),r.inPlace(HTMLBodyElement.prototype,c,"dom-"))),n.on("dom-start",(function(t){!function(t){if(!t||"string"!=typeof t.nodeName||"script"!==t.nodeName.toLowerCase())return;if("function"!=typeof t.addEventListener)return;var a=(c=t.src,u=c.match(o),u?u[1]:null);var c,u;if(!a)return;var f=function(e){var t=e.match(i);if(t&&t.length>=3)return{key:t[2],parent:s(t[1],window)};return{key:e,parent:window}}(a);if("function"!=typeof f.parent[f.key])return;var d={};function l(){n.emit("jsonp-end",[],d),t.removeEventListener("load",l,(0,e.m)(!1)),t.removeEventListener("error",p,(0,e.m)(!1))}function p(){n.emit("jsonp-error",[],d),n.emit("jsonp-end",[],d),t.removeEventListener("load",l,(0,e.m)(!1)),t.removeEventListener("error",p,(0,e.m)(!1))}r.inPlace(f.parent,[f.key],"cb-",d),t.addEventListener("load",l,(0,e.m)(!1)),t.addEventListener("error",p,(0,e.m)(!1)),n.emit("new-jsonp",[t.src],d)}(t[0])})),n}var xe={};function Ee(e){var t=function(e){return(e||u.ee).get("mutation")}(e);if(xe[t.debugId])return t;xe[t.debugId]=!0;var n=ue(t),r=P.Y.MO;return r&&(window.MutationObserver=function(e){return this instanceof r?new r(n(e,"fn-")):r.apply(this,arguments)},MutationObserver.prototype=r.prototype),t}var je={};function Pe(e){var t=function(e){return(e||u.ee).get("promise")}(e);if(je[t.debugId])return t;je[t.debugId]=!0;var n=u.c,r=ue(t),o=P.Y.PR;return o&&function(){function e(e){var n=t.context(),i=r(e,"executor-",n,null,!1),a=new o(i);return t.context(a).getCtx=function(){return n},a}window.Promise=e,["all","race"].forEach((function(e){var n=o[e];o[e]=function(r){var i=!1;(0,V.D)(r,(function(t,n){Promise.resolve(n).then(c("all"===e),c(!1))}));var a=n.apply(o,arguments);return o.resolve(a);function c(e){return function(){t.emit("propagate",[null,!i],a,!1,!1),i=i||!e}}}})),["resolve","reject"].forEach((function(e){var n=o[e];o[e]=function(e){var r=n.apply(o,arguments);return e!==r&&t.emit("propagate",[e,!0],r,!1,!1),r}})),o.prototype.catch=function(e){return this.then(null,e)},Object.assign(o.prototype,{constructor:{value:e}}),(0,V.D)(Object.getOwnPropertyNames(o),(function(t,n){try{e[n]=o[n]}catch(e){}})),le(o.prototype,"then",(function(e){return function(){var o=this,i=pe.apply(this,arguments),a=n(o);a.promise=o,i[0]=r(i[0],"cb-",a,null,!1),i[1]=r(i[1],"cb-",a,null,!1);var c=e.apply(this,i);return a.nextPromise=c,t.emit("propagate",[o,!0],c,!1,!1),c}})),t.on("executor-start",(function(e){e[0]=r(e[0],"resolve-",this,null,!1),e[1]=r(e[1],"resolve-",this,null,!1)})),t.on("executor-err",(function(e,t,n){e[1](n)})),t.on("cb-end",(function(e,n,r){t.emit("propagate",[r,!0],this.nextPromise,!1,!1)})),t.on("propagate",(function(e,n,r){this.getCtx&&!n||(this.getCtx=function(){if(e instanceof Promise)var n=t.context(e);return n&&n.getCtx?n.getCtx():this})})),e.toString=function(){return""+o}}(),t}var _e={};function Le(e){var t=function(e){return(e||u.ee).get("events")}(e);if(_e[t.debugId])return t;_e[t.debugId]=!0;var n=ue(t,!0),r=XMLHttpRequest,o="addEventListener",i="removeEventListener";function a(e){for(var t=e;t&&!t.hasOwnProperty(o);)t=Object.getPrototypeOf(t);t&&c(t)}function c(e){n.inPlace(e,[o,i],"-",s)}function s(e,t){return e[1]}return"getPrototypeOf"in Object?(a(document),a(window),a(r.prototype)):r.prototype.hasOwnProperty(o)&&(c(window),c(r.prototype)),t.on("addEventListener-start",(function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)){var o=(0,X.X)(r,"nr@wrapped",(function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?n(e,"fn-",null,e.name||"anonymous"):r}));this.wrapped=e[1]=o}})),t.on("removeEventListener-start",(function(e){e[1]=this.wrapped||e[1]})),t}var Te={};function Ce(t){var n=t||u.ee,r=function(e){return(e||u.ee).get("xhr")}(n);if(Te[r.debugId])return r;Te[r.debugId]=!0,Le(n);var o=ue(r),i=P.Y.XHR,a=P.Y.MO,c=P.Y.PR,s=P.Y.SI,f="readystatechange",d=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],l=[],p=window.XMLHttpRequest.listeners,h=window.XMLHttpRequest=function(t){var n=new i(t);function o(){try{r.emit("new-xhr",[n],n),n.addEventListener(f,m,(0,e.m)(!1))}catch(e){console.error(e);try{r.emit("internal-error",[e])}catch(e){}}}return this.listeners=p?[].concat(p,[o]):[o],this.listeners.forEach((function(e){return e()})),n};function v(e,t){o.inPlace(t,["onreadystatechange"],"fn-",O)}function m(){var e=this,t=r.context(e);e.readyState>3&&!t.resolved&&(t.resolved=!0,r.emit("xhr-resolved",[],e)),o.inPlace(e,d,"fn-",O)}if(function(e,t){for(var n in e)t[n]=e[n]}(i,h),h.prototype=i.prototype,o.inPlace(h.prototype,["open","send"],"-xhr-",O),r.on("send-xhr-start",(function(e,t){v(e,t),function(e){l.push(e),a&&(g?g.then(w):s?s(w):(y=-y,b.data=y))}(t)})),r.on("open-xhr-start",v),a){var g=c&&c.resolve();if(!s&&!c){var y=1,b=document.createTextNode(y);new a(w).observe(b,{characterData:!0})}}else n.on("fn-end",(function(e){e[0]&&e[0].type===f||w()}));function w(){for(var e=0;e<l.length;e++)v(0,l[e]);l.length&&(l=[])}function O(e,t){return t}return r}function Se(e){return Le(e)}function Ie(e){return oe(e)}function Re(e){return be(e)}function ke(e){return ge(e)}function Ae(e){return ve(e)}function He(e){return Ce(e)}function Ne(e,t){return Ne=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ne(e,t)}var ze="nr@seenError",Me=function(e){var t,n;function r(t){var n;(n=e.call(this,t)||this).skipNext=0,n.handleErrors=!1,n.origOnerror=window.onerror;var r=function(e){if(void 0===e)throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");return e}(n),o=(0,U.O)(n.agentIdentifier);o.features.err=!0,r.ee.on("fn-start",(function(e,t,n){r.handleErrors&&(r.skipNext+=1)})),r.ee.on("fn-err",(function(e,t,n){r.handleErrors&&!n[ze]&&((0,X.X)(n,ze,(function(){return!0})),this.thrown=!0,qe(n,void 0,r.ee))})),r.ee.on("fn-end",(function(){r.handleErrors&&!this.thrown&&r.skipNext>0&&(r.skipNext-=1)})),r.ee.on("internal-error",(function(e){(0,h.p)("ierr",[e,(0,v.zO)(),!0],void 0,void 0,r.ee)}));var i=window.onerror;window.onerror=function(){var e;return i&&i.apply(void 0,arguments),(e=n).onerrorHandler.apply(e,arguments),!1};try{window.addEventListener("unhandledrejection",(function(e){var t=new Error(""+e.reason);(0,h.p)("err",[t,(0,v.zO)(),!1,{unhandledPromiseRejection:1}],void 0,void 0,n.ee)}))}catch(e){}try{throw new Error}catch(e){"stack"in e&&(Ae(n.ee),ke(n.ee),"addEventListener"in window&&Se(n.ee),o.xhrWrappable&&He(n.ee),r.handleErrors=!0)}return n}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,Ne(t,n),r.prototype.onerrorHandler=function(e,t,n,r,o){try{this.skipNext?this.skipNext-=1:qe(o||new De(e,t,n),!0,this.ee)}catch(e){try{(0,h.p)("ierr",[e,(0,v.zO)(),!0],void 0,void 0,this.ee)}catch(e){}}return"function"==typeof this.origOnerror&&this.origOnerror.apply(this,W()(arguments))},r}(y.W);function De(e,t,n){this.message=e||"Uncaught error with no additional information",this.sourceURL=t,this.line=n}function qe(e,t,n){var r=t?null:(0,v.zO)();(0,h.p)("err",[e,r],void 0,void 0,n)}var Be=o(1424),Fe=o(5955),Ge={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},Ue={};function Xe(e){if(!e)throw new Error("All loader-config objects require an agent identifier!");if(!Ue[e])throw new Error("LoaderConfig for "+e+" was never set");return Ue[e]}var Ze=1;function We(e){var t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===window?0:(0,X.X)(e,"nr@id",(function(){return Ze++}))}var Ve=o(5973);function Ye(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return JSON.stringify(e).length}catch(e){return}}}var Qe=o(7001),Ke=o(4168),Je=function(){function e(e){this.agentIdentifier=e,this.generateTracePayload=this.generateTracePayload.bind(this),this.shouldGenerateTrace=this.shouldGenerateTrace.bind(this)}var t=e.prototype;return t.generateTracePayload=function(e){if(!this.shouldGenerateTrace(e))return null;var t=Xe(this.agentIdentifier);if(!t)return null;var n=(t.accountID||"").toString()||null,r=(t.agentID||"").toString()||null,o=(t.trustKey||"").toString()||null;if(!n||!r)return null;var i=(0,Ke.M)(),a=(0,Ke.Ht)(),c=Date.now(),u={spanId:i,traceId:a,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(u.traceContextParentHeader=this.generateTraceContextParentHeader(i,a),u.traceContextStateHeader=this.generateTraceContextStateHeader(i,c,n,r,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(u.newrelicHeader=this.generateTraceHeader(i,a,c,n,r,o)),u},t.generateTraceContextParentHeader=function(e,t){return"00-"+t+"-"+e+"-01"},t.generateTraceContextStateHeader=function(e,t,n,r,o){return o+"@nr=0-1-"+n+"-"+r+"-"+e+"----"+t},t.generateTraceHeader=function(e,t,n,r,o,i){if(!("btoa"in window&&"function"==typeof window.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:r,ap:o,id:e,tr:t,ti:n}};return i&&r!==i&&(a.d.tk=i),btoa(JSON.stringify(a))},t.shouldGenerateTrace=function(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)},t.isAllowedOrigin=function(e){var t=!1,n={};if((0,j.Mt)(this.agentIdentifier,"distributed_tracing")&&(n=(0,j.P_)(this.agentIdentifier).distributed_tracing),e.sameOrigin)t=!0;else if(n.allowed_origins instanceof Array)for(var r=0;r<n.allowed_origins.length;r++){var o=(0,Qe.e)(n.allowed_origins[r]);if(e.hostname===o.hostname&&e.protocol===o.protocol&&e.port===o.port){t=!0;break}}return t},t.isDtEnabled=function(){var e=(0,j.Mt)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.enabled},t.excludeNewrelicHeader=function(){var e=(0,j.Mt)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.exclude_newrelic_header},t.useNewrelicHeaderForCors=function(){var e=(0,j.Mt)(this.agentIdentifier,"distributed_tracing");return!!e&&!1!==e.cors_use_newrelic_header},t.useTraceContextHeadersForCors=function(){var e=(0,j.Mt)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.cors_use_tracecontext_headers},e}();function $e(e,t){return $e=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},$e(e,t)}var et=["load","error","abort","timeout"],tt=et.length,nt=P.Y.REQ,rt=window.XMLHttpRequest,ot=function(t){var n,r;function o(n){var r;r=t.call(this,n)||this;var o=(0,U.O)(r.agentIdentifier);return!o.xhrWrappable||o.disabled?function(e){if(void 0===e)throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");return e}(r):(o.features.xhr=!0,r.dt=new Je(r.agentIdentifier),r.handler=function(e,t,n,o){return(0,h.p)(e,t,n,o,r.ee)},r.wrappedFetch=Ie(r.ee),He(r.ee),function(t,n,r,o){function i(t){var n=this;n.totalCbs=0,n.called=0,n.cbTime=0,n.end=O,n.ended=!1,n.xhrGuids={},n.lastSize=null,n.loadCaptureCalled=!1,n.params=this.params||{},n.metrics=this.metrics||{},t.addEventListener("load",(function(e){E(n,t)}),(0,e.m)(!1)),Ve.I&&(Ve.I>34||Ve.I<10)||t.addEventListener("progress",(function(e){n.lastSize=e.loaded}),(0,e.m)(!1))}function a(e){this.params={method:e[0]},x(this,e[1]),this.metrics={}}function c(e,n){var r=Xe(t);"xpid"in r&&this.sameOrigin&&n.setRequestHeader("X-NewRelic-ID",r.xpid);var i=o.generateTracePayload(this.parsedOrigin);if(i){var a=!1;i.newrelicHeader&&(n.setRequestHeader("newrelic",i.newrelicHeader),a=!0),i.traceContextParentHeader&&(n.setRequestHeader("traceparent",i.traceContextParentHeader),i.traceContextStateHeader&&n.setRequestHeader("tracestate",i.traceContextStateHeader),a=!0),a&&(this.dt=i)}}function u(t,r){var o=this.metrics,i=t[0],a=this;if(o&&i){var c=Ye(i);c&&(o.txSize=c)}this.startTime=(0,v.zO)(),this.listener=function(e){try{"abort"!==e.type||a.loadCaptureCalled||(a.params.aborted=!0),("load"!==e.type||a.called===a.totalCbs&&(a.onloadCalled||"function"!=typeof r.onload))&&a.end(r)}catch(e){try{n.emit("internal-error",[e])}catch(e){}}};for(var u=0;u<tt;u++)r.addEventListener(et[u],this.listener,(0,e.m)(!1))}function s(e,t,n){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof n.onload||this.end(n)}function f(e,t){var n=""+We(e)+!!t;this.xhrGuids&&!this.xhrGuids[n]&&(this.xhrGuids[n]=!0,this.totalCbs+=1)}function d(e,t){var n=""+We(e)+!!t;this.xhrGuids&&this.xhrGuids[n]&&(delete this.xhrGuids[n],this.totalCbs-=1)}function l(){this.endTime=(0,v.zO)()}function p(e,t){t instanceof rt&&"load"===e[0]&&n.emit("xhr-load-added",[e[1],e[2]],t)}function h(e,t){t instanceof rt&&"load"===e[0]&&n.emit("xhr-load-removed",[e[1],e[2]],t)}function m(e,t,n){t instanceof rt&&("onload"===n&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,v.zO)()))}function g(e,t){this.xhrCbStart&&n.emit("xhr-cb-time",[(0,v.zO)()-this.xhrCbStart,this.onload,t],t)}function y(e){var t,n=e[1]||{};"string"==typeof e[0]?t=e[0]:e[0]&&e[0].url?t=e[0].url:window.URL&&e[0]&&e[0]instanceof URL&&(t=e[0].href),t&&(this.parsedOrigin=(0,Qe.e)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var r=o.generateTracePayload(this.parsedOrigin);if(r&&(r.newrelicHeader||r.traceContextParentHeader))if("string"==typeof e[0]||window.URL&&e[0]&&e[0]instanceof URL){var i={};for(var a in n)i[a]=n[a];i.headers=new Headers(n.headers||{}),c(i.headers,r)&&(this.dt=r),e.length>1?e[1]=i:e.push(i)}else e[0]&&e[0].headers&&c(e[0].headers,r)&&(this.dt=r);function c(e,t){var n=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),n=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),n=!0),n}}function b(e,t){this.params={},this.metrics={},this.startTime=(0,v.zO)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var n,r=this.opts||{},o=this.target;"string"==typeof o?n=o:"object"==typeof o&&o instanceof nt?n=o.url:window.URL&&"object"==typeof o&&o instanceof URL&&(n=o.href),x(this,n);var i=(""+(o&&o instanceof nt&&o.method||r.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Ye(r.body)||0}function w(e,t){var n;this.endTime=(0,v.zO)(),this.params||(this.params={}),this.params.status=t?t.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);var o={txSize:this.txSize,rxSize:n,duration:(0,v.zO)()-this.startTime};r("xhr",[this.params,o,this.startTime,this.endTime,"fetch"],this)}function O(e){var t=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(var o=0;o<tt;o++)e.removeEventListener(et[o],this.listener,!1);t.aborted||(n.duration=(0,v.zO)()-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):E(this,e),n.cbTime=this.cbTime,r("xhr",[t,n,this.startTime,this.endTime,"xhr"],this))}}function x(e,t){var n=(0,Qe.e)(t),r=e.params;r.hostname=n.hostname,r.port=n.port,r.protocol=n.protocol,r.host=n.hostname+":"+n.port,r.pathname=n.pathname,e.parsedOrigin=n,e.sameOrigin=n.sameOrigin}function E(e,t){e.params.status=t.status;var n=function(e,t){var n=e.responseType;return"json"===n&&null!==t?t:"arraybuffer"===n||"blob"===n||"json"===n?Ye(e.response):"text"===n||""===n||void 0===n?Ye(e.responseText):void 0}(t,e.lastSize);if(n&&(e.metrics.rxSize=n),e.sameOrigin){var r=t.getResponseHeader("X-NewRelic-App-Data");r&&(e.params.cat=r.split(", ").pop())}e.loadCaptureCalled=!0}n.on("new-xhr",i),n.on("open-xhr-start",a),n.on("open-xhr-end",c),n.on("send-xhr-start",u),n.on("xhr-cb-time",s),n.on("xhr-load-added",f),n.on("xhr-load-removed",d),n.on("xhr-resolved",l),n.on("addEventListener-end",p),n.on("removeEventListener-end",h),n.on("fn-end",g),n.on("fetch-before-start",y),n.on("fetch-start",b),n.on("fn-start",m),n.on("fetch-done",w)}(r.agentIdentifier,r.ee,r.handler,r.dt),r)}return r=t,(n=o).prototype=Object.create(r.prototype),n.prototype.constructor=n,$e(n,r),o}(y.W);var it=o(5098);function at(e,t){return at=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},at(e,t)}var ct="addEventListener",ut="resourcetimingbufferfull",st="bstResource",ft="-start",dt="-end",lt="fn-start",pt="fn-end",ht="bstTimer",vt="pushState",mt=P.Y.EV,gt=function(t){var n,r;function o(n){var r;if(r=t.call(this,n)||this,!(window.performance&&window.performance.timing&&window.performance.getEntriesByType))return function(e){if(void 0===e)throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");return e}(r);(0,U.O)(r.agentIdentifier).features.stn=!0;var o=r.ee;function i(e){if((0,h.p)(st,[window.performance.getEntriesByType("resource")],void 0,void 0,o),window.performance.clearResourceTimings)try{window.performance.removeEventListener(ut,i,!1)}catch(e){}else try{window.performance.removeEventListener("webkitresourcetimingbufferfull",i,!1)}catch(e){}}return r.timerEE=Ae(r.ee),r.rafEE=ke(r.ee),Re(r.ee),Se(r.ee),r.ee.on(lt,(function(e,t){e[0]instanceof mt&&(this.bstStart=(0,v.zO)())})),r.ee.on(pt,(function(e,t){var n=e[0];n instanceof mt&&(0,h.p)("bst",[n,t,this.bstStart,(0,v.zO)()],void 0,void 0,o)})),r.timerEE.on(lt,(function(e,t,n){this.bstStart=(0,v.zO)(),this.bstType=n})),r.timerEE.on(pt,(function(e,t){(0,h.p)(ht,[t,this.bstStart,(0,v.zO)(),this.bstType],void 0,void 0,o)})),r.rafEE.on(lt,(function(){this.bstStart=(0,v.zO)()})),r.rafEE.on(pt,(function(e,t){(0,h.p)(ht,[t,this.bstStart,(0,v.zO)(),"requestAnimationFrame"],void 0,void 0,o)})),r.ee.on(vt+ft,(function(e){this.time=(0,v.zO)(),this.startPath=location.pathname+location.hash})),r.ee.on(vt+dt,(function(e){(0,h.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,void 0,o)})),(0,it.W)()?((0,h.p)(st,[window.performance.getEntriesByType("resource")],void 0,void 0,o),function(){var e=new PerformanceObserver((function(e,t){var n=e.getEntries();(0,h.p)(st,[n],void 0,void 0,o)}));try{e.observe({entryTypes:["resource"]})}catch(e){}}()):ct in window.performance&&(window.performance.clearResourceTimings?window.performance.addEventListener(ut,i,(0,e.m)(!1)):window.performance.addEventListener("webkitresourcetimingbufferfull",i,(0,e.m)(!1))),document.addEventListener("scroll",r.noOp,(0,e.m)(!1)),document.addEventListener("keypress",r.noOp,(0,e.m)(!1)),document.addEventListener("click",r.noOp,(0,e.m)(!1)),r}return r=t,(n=o).prototype=Object.create(r.prototype),n.prototype.constructor=n,at(n,r),o.prototype.noOp=function(e){},o}(y.W);function yt(e,t){return yt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},yt(e,t)}var bt=function(e){var t,n;function r(t){var n;return n=e.call(this,t)||this,(0,U.O)(n.agentIdentifier).features.ins=!0,n}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,yt(t,n),r}(y.W);function wt(e,t){return wt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},wt(e,t)}var Ot="fn-start",xt="fn-end",Et="cb-start",jt="cb-end",Pt=window,_t=Pt.location,Lt=function(t){var n,r;function o(n){var r;r=t.call(this,n)||this;var o=(0,U.O)(r.agentIdentifier);if(!Pt.addEventListener||!o.xhrWrappable||o.disabled)return function(e){if(void 0===e)throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");return e}(r);o.features.spa=!0;var i,a=0,c=r.ee.get("tracer"),u=Oe(r.ee),s=function(e){return Pe(e)}(r.ee),f=Se(r.ee),d=Ae(r.ee),l=He(r.ee),p=Ie(r.ee),h=Re(r.ee),m=function(e){return Ee(e)}(r.ee);function g(e,t){h.emit("newURL",[""+_t,t])}function y(){a++,i=_t.hash,this["fn-start"]=(0,v.zO)()}function b(){a--,_t.hash!==i&&g(0,!0);var e=(0,v.zO)();this.jsTime=~~this.jsTime+e-this["fn-start"],this["fn-end"]=e}function w(e,t){e.on(t,(function(){this[t]=(0,v.zO)()}))}return r.ee.on(Ot,y),s.on(Et,y),u.on(Et,y),r.ee.on(xt,b),s.on(jt,b),u.on(jt,b),r.ee.buffer([Ot,xt,"xhr-resolved"]),f.buffer([Ot]),d.buffer(["setTimeout-end","clearTimeout-start",Ot]),l.buffer([Ot,"new-xhr","send-xhr-start"]),p.buffer(["fetch-start","fetch-done","fetch-body-start","fetch-body-end"]),h.buffer(["newURL"]),m.buffer([Ot]),s.buffer(["propagate",Et,jt,"executor-err","resolve-start"]),c.buffer([Ot,"no-fn-start"]),u.buffer(["new-jsonp","cb-start","jsonp-error","jsonp-end"]),w(p,"fetch-start"),w(p,"fetch-done"),w(u,"new-jsonp"),w(u,"jsonp-end"),w(u,"cb-start"),h.on("pushState-end",g),h.on("replaceState-end",g),Pt.addEventListener("hashchange",g,(0,e.m)(!0)),Pt.addEventListener("load",g,(0,e.m)(!0)),Pt.addEventListener("popstate",(function(){g(0,a>1)}),(0,e.m)(!0)),r}return r=t,(n=o).prototype=Object.create(r.prototype),n.prototype.constructor=n,wt(n,r),o}(y.W),Tt=o(847),Ct=o(8539),St=o.n(Ct),It=o(441);var Rt=!1;new Promise((function(e,t){if(Rt)e(Rt);else{var n=(0,Be.gG)();try{(0,It.L)(p.Z,n.info),(0,j.Dg)(p.Z,n.init),function(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");Ue[e]=new Fe.I(t,Ge),(0,Be.Qy)(e,Ue[e],"loader_config")}(p.Z,n.loader_config),(0,U.s)(p.Z,{}),function(e){var t=(0,Be.fP)(),n=u.ee.get(e),r=n.get("tracer"),o="api-",i="api-ixn-";function a(){}(0,V.D)(["setErrorHandler","finished","addToTrace","inlineHit","addRelease"],(function(e,n){t[n]=s(o,n,!0,"api")})),t.addPageAction=s(o,"addPageAction",!0),t.setCurrentRouteName=s(o,"routeName",!0),t.setPageViewName=function(t,n){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,U.O)(e).customTransaction=(n||"http://custom.transaction")+t,s(o,"setPageViewName",!0,"api")()},t.setCustomAttribute=function(t,n){var r,i=(0,It.C)(e);return(0,It.L)(e,Object.assign({},i,{jsAttributes:Object.assign({},i.jsAttributes,(r={},r[t]=n,r))})),s(o,"setCustomAttribute",!0,"api")()},t.interaction=function(){return(new a).get()};var c=a.prototype={createTracer:function(e,t){var o={},i=this,a="function"==typeof t;return(0,h.p)("api-ixn-tracer",[(0,v.zO)(),e,o],i,void 0,n),function(){if(r.emit((a?"":"no-")+"fn-start",[(0,v.zO)(),i,a],o),a)try{return t.apply(this,arguments)}catch(e){throw r.emit("fn-err",[arguments,this,"string"==typeof e?new Error(e):e],o),e}finally{r.emit("fn-end",[(0,v.zO)()],o)}}}};function s(e,t,r,o){return function(){return(0,h.p)("record-supportability",["API/"+t+"/called"],void 0,void 0,n),(0,h.p)(e+t,[(0,v.zO)()].concat(St()(arguments)),r?null:this,o,n),r?void 0:this}}(0,V.D)("actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),(function(e,t){c[t]=s(i,t)})),t.noticeError=function(e,t){"string"==typeof e&&(e=new Error(e)),(0,h.p)("record-supportability",["API/noticeError/called"],void 0,void 0,n),(0,h.p)("err",[e,(0,v.zO)(),!1,t],void 0,void 0,n)}}(p.Z),e(Rt=!0)}catch(e){t(e)}}})).then((function(){var e,t,n,r=(0,Tt.K)(p.Z);r.page_view_event&&new E(p.Z),r.page_view_timing&&new L(p.Z),r.metrics&&new G(p.Z),r.jserrors&&new Me(p.Z),r.ajax&&new ot(p.Z),r.session_trace&&new gt(p.Z),r.page_action&&new bt(p.Z),r.spa&&new Lt(p.Z),e="spa",t?setTimeout((function(){return l(e)}),n||1e3):a((function(){return l(e)}))}))}(),i}()}));</script>\n<meta name="viewport" content="width=device-width, initial-scale=1">\n<link rel="profile" href="http://gmpg.org/xfn/11">\n\n<title>People &#8211; Department of Computer Science and Statistics</title>\n\r\n\t  <meta name=\'robots\' content=\'max-image-preview:large\' />\n<link rel=\'dns-prefetch\' href=\'//web.uri.edu\' />\n<link rel=\'dns-prefetch\' href=\'//s.w.org\' />\n<link rel="alternate" type="application/rss+xml" title="Department of Computer Science and Statistics &raquo; Feed" href="https://web.uri.edu/cs/feed/" />\n<link rel="alternate" type="application/rss+xml" title="Department of Computer Science and Statistics &raquo; Comments Feed" href="https://web.uri.edu/cs/comments/feed/" />\n\t\t<script type="text/javascript">\n\t\t\twindow._wpemojiSettings = {"baseUrl":"https:\\/\\/s.w.org\\/images\\/core\\/emoji\\/13.0.1\\/72x72\\/","ext":".png","svgUrl":"https:\\/\\/s.w.org\\/images\\/core\\/emoji\\/13.0.1\\/svg\\/","svgExt":".svg","source":{"concatemoji":"https:\\/\\/web.uri.edu\\/cs\\/wp-includes\\/js\\/wp-emoji-release.min.js?ver=5.7.1"}};\n\t\t\t!function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode;p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0);e=i.toDataURL();return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(!p||!p.fillText)return!1;switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([55357,56424,8205,55356,57212],[55357,56424,8203,55356,57212])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(n=t.source||{}).concatemoji?c(n.concatemoji):n.wpemoji&&n.twemoji&&(c(n.twemoji),c(n.wpemoji)))}(window,document,window._wpemojiSettings);\n\t\t</script>\n\t\t<style type="text/css">\nimg.wp-smiley,\nimg.emoji {\n\tdisplay: inline !important;\n\tborder: none !important;\n\tbox-shadow: none !important;\n\theight: 1em !important;\n\twidth: 1em !important;\n\tmargin: 0 .07em !important;\n\tvertical-align: -0.1em !important;\n\tbackground: none !important;\n\tpadding: 0 !important;\n}\n</style>\n\t<link rel=\'stylesheet\' id=\'wp-block-library-css\'  href=\'https://web.uri.edu/cs/wp-includes/css/dist/block-library/style.min.css?ver=5.7.1\' type=\'text/css\' media=\'all\' />\n<link rel=\'stylesheet\' id=\'uricl-css-css\'  href=\'https://web.uri.edu/cs/wp-content/plugins/uri-component-library/css/cl.built.css?ver=5.0.2\' type=\'text/css\' media=\'all\' />\n<link rel=\'stylesheet\' id=\'uri-kuali-styles-css\'  href=\'https://web.uri.edu/cs/wp-content/plugins/uri-kuali/css/uri-kuali.css?ver=5.7.1\' type=\'text/css\' media=\'all\' />\n<link rel=\'stylesheet\' id=\'uri-people-styles-css\'  href=\'https://web.uri.edu/cs/wp-content/plugins/uri-people-tool/assets/people.css?ver=5.7.1\' type=\'text/css\' media=\'all\' />\n<link rel=\'stylesheet\' id=\'wp-lightbox-2.min.css-css\'  href=\'https://web.uri.edu/cs/wp-content/plugins/wp-lightbox-2/styles/lightbox.min.css?ver=1.3.4\' type=\'text/css\' media=\'all\' />\n<link rel=\'stylesheet\' id=\'uri-modern-style-css\'  href=\'https://web.uri.edu/cs/wp-content/themes/uri-modern/style.css?ver=2.4.4\' type=\'text/css\' media=\'all\' />\n<link rel=\'stylesheet\' id=\'tablepress-default-css\'  href=\'https://web.uri.edu/cs/wp-content/plugins/tablepress/css/default.min.css?ver=1.13\' type=\'text/css\' media=\'all\' />\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-includes/js/jquery/jquery.min.js?ver=3.5.1\' id=\'jquery-core-js\'></script>\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.3.2\' id=\'jquery-migrate-js\'></script>\n<link rel="https://api.w.org/" href="https://web.uri.edu/cs/wp-json/" /><link rel="alternate" type="application/json" href="https://web.uri.edu/cs/wp-json/wp/v2/pages/629" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://web.uri.edu/cs/xmlrpc.php?rsd" />\n<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://web.uri.edu/cs/wp-includes/wlwmanifest.xml" /> \n<meta name="generator" content="WordPress 5.7.1" />\n<link rel="canonical" href="https://web.uri.edu/cs/people/" />\n<link rel=\'shortlink\' href=\'https://web.uri.edu/cs/?p=629\' />\n<link rel="alternate" type="application/json+oembed" href="https://web.uri.edu/cs/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fweb.uri.edu%2Fcs%2Fpeople%2F" />\n<link rel="alternate" type="text/xml+oembed" href="https://web.uri.edu/cs/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fweb.uri.edu%2Fcs%2Fpeople%2F&#038;format=xml" />\n<meta name="description" content="People Full-time Faculty Adjunct Faculty and Limited Join Appointments" />\n<meta name="twitter:card" content="summary_large_image" />\n<meta name="twitter:site" content="@universityofri" />\n<meta name="twitter:creator" content="@universityofri" />\n<meta property="og:url" content="https://web.uri.edu/cs/people/" />\n<meta property="og:title" content="People" />\n<meta property="og:description" content="People Full-time Faculty Adjunct Faculty and Limited Join Appointments" />\n<meta property="og:image" content="https://web.uri.edu/cs/wp-content/themes/uri-modern/images/logo-wordmark.png" />\n\t\t\t\t\t<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':\nnew Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\n\'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,\'script\',\'dataLayer\',\'GTM-K5GL9W\');</script>\n\t\t\t<style type="text/css" id="wp-custom-css">\n\t\t\t.button-list .cl-button {\n\tmargin-bottom: 1rem;\n}\n\n#calendar .date,#calendar-wrap header {\n\ttext-align:center\n}\n#calendar {\n\twidth:100%\n}\n#calendar a {\n\tcolor:#005eff;\n\ttext-decoration:none\n}\n#calendar ul {\n\tlist-style:none;\n\tpadding:0;\n\tmargin:0;\n\twidth:100%\n}\n#calendar li {\n\tdisplay:block;\n\tfloat:left;\n\twidth:14.342%;\n\tpadding:5px;\n\tbox-sizing:border-box;\n\tborder:1px solid #ccc;\n\tmargin-right:-1px;\n\tmargin-bottom:-1px\n}\n#calendar ul.weekdays {\n\theight:40px;\n\tbackground:#002147\n}\n#calendar ul.weekdays li {\n\ttext-align:center;\n\ttext-transform:uppercase;\n\tline-height:1.2;\n\tborder:none!important;\n\tpadding:.75rem .5rem;\n\tcolor:#fff;\n\tfont-size:.9rem\n}\n#calendar ul.days.mobile {\n\tdisplay:none\n}\n#calendar .days li {\n\theight:15rem\n}\n#calendar .days.events-zero li {\n\theight:10rem\n}\n#calendar .days.events-one li {\n\theight:10.75rem\n}\n#calendar .days.events-two li {\n\theight:11.5rem\n}\n#calendar .days.events-three li {\n\theight:15rem\n}\n#calendar .date {\n\tmargin-bottom:5px;\n\tpadding:4px;\n\tcolor:#000;\npadding-right: 1rem;\n\tfloat:right;\n}\n#calendar .event {\n\tclear:both;\n\tdisplay:block;\n\tfont-size: 1rem;\n\tfont-family: hind,arial,sans-serif;\n\tborder-radius:30px;\n\tpadding:.4rem .25rem .25rem 5rem;\n\tmargin-top:5px;\n\tmargin-bottom:5px;\n\tline-height:1.75;\n\tbackground:#e4f2f2;\n\ttext-decoration:none;\n\tfloat:left;\n\tposition:relative;\n\twidth:calc(100% * 4.68)\n}\n#calendar .event.four-day{\n\t\twidth:calc(76% * 4.68)\n}\n#calendar .event.mobile {\n\tdisplay:none\n}\n#calendar .event.scratch {\n\tbackground:#E2D58B;\n}\n#calendar .event.lego {\n\tbackground:#E1EDE8;\n}\n#calendar .event.datacience {\n\tbackground:#FCB97D;\n}\n#calendar .event.girlstech {\n\tbackground:#C2CFB2;\n}\n#calendar .event.games {\n\tbackground:#F79365;\n}\n#calendar .event.programming {\n\tbackground:#BCDCE0;\n}\n#calendar .event.webdesign {\n\tbackground:#E09FA2;\n}\n#calendar .event-desc {\n\tcolor:#666;\n\tmargin:3px 0 7px;\n\ttext-decoration:none;\n\tdisplay:inline-block\n}\n#calendar .event-time {\n\tmargin:3px 0 7px 5px;\n\ttext-decoration:none;\n\tdisplay:inline-block\n}\n#calendar .other-month {\n\tbackground:#f5f5f5;\n\tcolor:#666\n}\n#desc {\n\tdisplay:none;\n\tbackground:#eee;\n\tbox-shadow: 0 0 4px #999;\n\tpadding:10px;\n\t\tcolor: #000;\n}\n#calendar .event-desc:hover+#desc {\n\tdisplay:block;\n\tposition:absolute;\n\tz-index:2\n}\n.days+header h1 {\n\tpadding-top:2rem;\n\tclear: left\n}\n@media(max-width:768px) {\n\t#calendar .event img,#calendar .other-month,#calendar .weekdays {\n\t\tdisplay:none\n\t}\n\t#calendar .event {\n\t\twidth:calc(100% - 2em);\n\t\tpadding-left:20px;\n\t\tpadding-right:10px\n\t}\n\t#calendar .event.mobile,#calendar ul.days.mobile {\n\t\tdisplay:block\n\t}\n\t#calendar li {\n\t\theight:auto!important;\n\t\tborder:1px solid #ededed;\n\t\twidth:100%;\n\t\tpadding:10px;\n\t\tmargin-bottom:-1px\n\t}\n\t#calendar .date {\n\t\tfloat:none\n\t}\n\n}\n\n.peopleitem.has-thumbnail img {\n\twidth: 200px;\n}\n\t\t</style>\n\t\t\t\n<!-- Favicons -->\n<link rel="mask-icon" href="https://web.uri.edu/cs/wp-content/themes/uri-modern/images/safari-pinned-tab.svg" color="#005eff">\n<link rel="icon" type="image/png" href="https://web.uri.edu/cs/wp-content/themes/uri-modern/images/favicon.png">\n<link rel="apple-touch-icon" href="https://web.uri.edu/cs/wp-content/themes/uri-modern/images/apple-touch-icon.png">\n<link rel="apple-touch-icon" sizes="180x180" href="https://web.uri.edu/cs/wp-content/themes/uri-modern/images/apple-touch-icon-180x180.png">\n\n\n</head>\n\t\n<body class="page-template-default page page-id-629 page-parent group-blog ln-people">\n\t\n<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-K5GL9W" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>\t\n<div id="page" class="site">\n\t<a class="skip-link screen-reader-text" href="#content">Skip to content</a>\n\n\n\t<div id="masthead">\n\t\t\n\t<header id="brandbar" class="site-header" role="banner">\n\n\t\t<div id="identity-print"><img src="https://web.uri.edu/cs/wp-content/themes/uri-modern/images/logo-print.png" width="120px" alt="University of Rhode Island"></div>\n\n\t\t<div id="globalsearch" role="search">\n\t\t\t<input type="checkbox" id="gsform-toggle" role="presentation" aria-label="Toggle visibility of the search box.">\n\t\t\t<label for="gsform-toggle" id="gsform"><span>Search</span></label>\n\t\t\t<form id="gs" method="get" action="https://www.uri.edu/search" name="global_general_search_form">\n\t\t\t\t<input type="hidden" name="cx" value="016863979916529535900:17qai8akniu" />\n\t\t\t\t<input type="hidden" name="cof" value="FORID:11" />\n\t\t\t\t<label id="gs-query-label" for="gs-query">Searchbox</label>\n\t\t\t\t<input role="searchbox" name="q" id="gs-query" value="" type="text" placeholder="Search" />\n\t\t\t\t<input type="submit" id="gs-submit" class="searchsubmit" name="searchsubmit" value="Search" />\n\t\t\t</form>\n\t\t</div>\n\n\t\t<div id="globalbanner-wrapper">\n\t\t\t<div id="globalbanner">\n\t\t\t\t<a href="https://www.uri.edu/" title="University of Rhode Island"><div id="identity">University of Rhode Island</div></a>\n\n\t\t\t\t<div id="gateways">\n\t\t\t\t\t<input type="checkbox" id="gateways-toggle" role="presentation" aria-label="Open the audience gateways menu when browsing on mobile">\n\t\t\t\t\t<label for="gateways-toggle" id="gateways-label"><span>You</span></label>\n\t\t\t\t\t<ul id="gateways-menu" role="menu">\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/gateway/future-students" role="menuitem">Future Students</a></li>\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/gateway/students" role="menuitem">Students</a></li>\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/gateway/faculty" role="menuitem">Faculty</a></li>\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/gateway/staff" role="menuitem">Staff</a></li>\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/gateway/families" role="menuitem">Parents and Families</a></li>\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/gateway/alumni" role="menuitem">Alumni</a></li>\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/gateway/community" role="menuitem">Community</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t</div>\n\t\t</div>\n\n\t</header><!-- #brandbar -->\n\t\t\n\t\t<header id="siteheader">\n\n\t\t\t\n\n<div id="sitebanner" \n class="light">\n\t\n\t<div id="sb-backdrop">\n\t\t<div id="sb-background-image" \n\t\t style="background-image:url(https://web.uri.edu/wp-content/uploads/sites/1531/cropped-Big-Data.jpg)"></div>\n\t\t<div id="sb-screen"></div>\n\t</div>\n\t\n\t<div id="sitebranding">\n\n\t\t\n<div id="siteidentity">\n\t\t\t\n\t<h1 class="site-title">\n\t\t<a href="https://web.uri.edu/cs/" rel="home">\n\t\t\tDepartment of Computer Science and Statistics\t\t</a>\n\t</h1>\n\t\t\t<h2 class="site-description">College of Arts and Sciences</h2>\n\t\n</div>\n\t\t\n\t\t<div id="sitesocial">\n\t\t\t\t\t</div>\n\t\t\n\t</div><!-- #sitebranding -->\n\n</div><!-- #sitebanner -->\n\n\t\t\t<div id="navigation" class="content-width">\n\t\t\t\t\n\n<nav id="breadcrumbs" aria-label="Breadcrumb">\n\t<ol><li><a href="https://www.uri.edu/">URI</a></li><li><a href="https://web.uri.edu/artsci">Arts and Sciences</a></li><li><a href="https://web.uri.edu/cs">Department of Computer Science and Statistics</a></li><li aria-current="page">People</li></ol></nav>\n  \n\t\t\t\t\n<div id="localnav">\n\t<section class="cl-wrapper cl-menu-wrapper"><div id="cl-localnav" class="cl-menu  " data-name="Site Menu" data-show-title="0"><ul id="menu-navigation" class="cl-menu-list cl-menu-list-no-js"><li id="menu-item-8243" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-8243"><a title="\t\t\t\t\t\t" href="https://web.uri.edu/cs">Home</a></li>\n<li id="menu-item-8255" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8255"><a title="\t\t\t\t\t\t" href="https://web.uri.edu/cs/about/">About</a></li>\n<li id="menu-item-8806" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8806"><a href="https://web.uri.edu/cs/academics/">Academics</a></li>\n<li id="menu-item-8257" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-629 current_page_item menu-item-8257"><a title="\t\t\t\t\t\t" href="https://web.uri.edu/cs/people/" aria-current="page">People</a></li>\n<li id="menu-item-9661" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9661"><a href="https://web.uri.edu/cs/research/">Research</a></li>\n<li id="menu-item-10871" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10871"><a href="https://web.uri.edu/cs/news-and-events/">News and Events</a></li>\n<li id="menu-item-8267" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8267"><a title="\t\t\t\t\t\t" href="https://web.uri.edu/cs/contact/">Contact</a></li>\n</ul></div></section></div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t</header>\n\t</div>\n\t\n\t<div id="content" class="site-content">\n\t\t\n\t\n\n\t<main id="main" class="site-main" role="main">\n\n\t\t\n<article id="post-629" class="post-629 page type-page status-publish hentry">\n\t\n\t<div class="entry-content">\n\t\t<h1>People</h1>\n<section class="cl-wrapper cl-menu-wrapper"><div id="" class="cl-menu  " data-name="people" data-show-title="0"><ul id="menu-people" class="cl-menu-list cl-menu-list-no-js"><li id="menu-item-8737" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-629 current_page_item menu-item-8737"><a href="https://web.uri.edu/cs/people/" aria-current="page">Faculty</a></li>\n<li id="menu-item-8746" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8746"><a href="https://web.uri.edu/cs/people/staff/">Staff</a></li>\n<li id="menu-item-11844" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-11844"><a href="https://web.uri.edu/cs/people/faculty-emeriti/">Faculty Emeriti</a></li>\n</ul></div></section>\n<h2>Full-time Faculty</h2>\n</p>\n<div class="uri-people-tool cl-tiles halves"><div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/marco-alvarez/"><img width="120" height="120" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/marco-alvarez.png" class="u-photo  wp-post-image" alt="" loading="lazy" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/marco-alvarez/">Marco Alvarez</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Associate Professor | Director of Graduate Studies</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><span class="p-tel">401.874.5009</span> &ndash; <a class="u-email" href="mailto:malvarez@uri.edu">malvarez@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card ">\n\t<header>\n\t\t<div class="header">\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/samantha-armenti/">Samantha Armenti</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Teaching Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:sarmenti@uri.edu ">sarmenti@uri.edu </a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/sarah-brown/"><img width="300" height="300" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Sarah-Brown.png" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Sarah-Brown.png 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Sarah-Brown-150x150.png 150w" sizes="(max-width: 300px) 100vw, 300px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/sarah-brown/">Sarah Brown</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:brownsarahm@uri.edu">brownsarahm@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/michael-conti/"><img width="2560" height="2475" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-scaled.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-scaled.jpg 2560w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-300x290.jpg 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-1024x990.jpg 1024w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-768x743.jpg 768w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-1536x1485.jpg 1536w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-2048x1980.jpg 2048w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-364x352.jpg 364w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-500x483.jpg 500w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-1000x967.jpg 1000w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-1280x1238.jpg 1280w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-2000x1934.jpg 2000w" sizes="(max-width: 2560px) 100vw, 2560px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/michael-conti/">Michael Conti</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Teaching Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:michaelconti@uri.edu ">michaelconti@uri.edu </a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/noah-daniels/"><img width="219" height="219" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/noah-daniels-web.png" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/noah-daniels-web.png 219w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/noah-daniels-web-150x150.png 150w" sizes="(max-width: 219px) 100vw, 219px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/noah-daniels/">Noah Daniels</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:noah_daniels@uri.edu">noah_daniels@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/lisa-dipippo/"><img width="125" height="126" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/lisa-dipippo-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/lisa-dipippo/">Lisa DiPippo</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Professor | Chair</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:ldipippo@uri.edu">ldipippo@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/victor-fay-wolfe/"><img width="125" height="125" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/victor-fay-wolfe-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/victor-fay-wolfe/">Victor Fay-Wolfe</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:vfaywolfe@uri.edu">vfaywolfe@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card ">\n\t<header>\n\t\t<div class="header">\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/lutz-hamel/">Lutz Hamel</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Associate Professor </p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:lutzhamel@uri.edu">lutzhamel@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/abdeltawab-hendawi/"><img width="1000" height="885" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1.jpeg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1.jpeg 1000w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1-300x266.jpeg 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1-768x680.jpeg 768w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1-364x322.jpeg 364w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1-500x443.jpeg 500w" sizes="(max-width: 1000px) 100vw, 1000px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/abdeltawab-hendawi/">Abdeltawab Hendawi</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Data Science | Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><span class="p-tel">401.874.5738</span> &ndash; <a class="u-email" href="mailto:hendawi@uri.edu">hendawi@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/jean-yves-herve/"><img width="300" height="299" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/jean-yves-herve-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/jean-yves-herve-web.jpg 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/jean-yves-herve-web-150x150.jpg 150w" sizes="(max-width: 300px) 100vw, 300px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/jean-yves-herve/">Jean-Yves Herv\xc3\xa9</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Associate Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:jyh@cs.uri.edu">jyh@cs.uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/natallia-katenka/"><img width="200" height="200" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/natalia-katenka-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/natalia-katenka-web.jpg 200w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/natalia-katenka-web-150x150.jpg 150w" sizes="(max-width: 200px) 100vw, 200px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/natallia-katenka/">Natallia Katenka</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Associate Professor | Director of Undergraduate Studies</p>\n\t\t\n\t\t\t\t<p class="people-department">Statistics</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:nkatenka@uri.edu">nkatenka@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card ">\n\t<header>\n\t\t<div class="header">\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/soheyb-kouider/">Soheyb Kouider</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Associate Teaching Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Statistics</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><span class="p-tel">401.874.2562</span> &ndash; <a class="u-email" href="mailto:soheyb@uri.edu">soheyb@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/edmund-lamagna/"><img width="150" height="150" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/edmund-lamagna-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/edmund-lamagna/">Edmund Lamagna</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:eal@cs.uri.edu">eal@cs.uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/indrani-mandal/"><img width="278" height="280" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/0.jpeg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/0.jpeg 278w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-150x150.jpeg 150w" sizes="(max-width: 278px) 100vw, 278px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/indrani-mandal/">Indrani Mandal</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Teaching Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:indrani_mandal@uri.edu ">indrani_mandal@uri.edu </a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/gavino-puggioni/"><img width="1600" height="1600" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381.jpg 1600w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-300x300.jpg 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-1024x1024.jpg 1024w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-150x150.jpg 150w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-768x768.jpg 768w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-1536x1536.jpg 1536w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-364x364.jpg 364w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-500x500.jpg 500w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-1000x1000.jpg 1000w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-1280x1280.jpg 1280w" sizes="(max-width: 1600px) 100vw, 1600px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/gavino-puggioni/">Gavino Puggioni</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Associate Professor |  Statistics Section Head | Director of Graduate Studies</p>\n\t\t\n\t\t\t\t<p class="people-department">Statistics</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><span class="p-tel">401.874.4388</span> &ndash; <a class="u-email" href="mailto:gpuggioni@uri.edu">gpuggioni@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card ">\n\t<header>\n\t\t<div class="header">\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/jonathan-schrader/">Jonathan Schrader</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Teaching Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:jonathan.schrader@uri.edu">jonathan.schrader@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/krishna-venkatasubramanian/"><img width="2437" height="2703" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2.jpg 2437w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-270x300.jpg 270w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-768x852.jpg 768w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-923x1024.jpg 923w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-364x404.jpg 364w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-500x555.jpg 500w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-1000x1109.jpg 1000w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-1280x1420.jpg 1280w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-2000x2218.jpg 2000w" sizes="(max-width: 2437px) 100vw, 2437px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/krishna-venkatasubramanian/">Krishna Venkatasubramanian</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:krish@uri.edu">krish@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/jing-wu/"><img width="200" height="200" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/jing-wu-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/jing-wu-web.jpg 200w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/jing-wu-web-150x150.jpg 150w" sizes="(max-width: 200px) 100vw, 200px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/jing-wu/">Jing Wu</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Associate Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Statistics</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><span class="p-tel">401.874.4504</span> &ndash; <a class="u-email" href="mailto:jing_wu@uri.edu">jing_wu@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/yichi-zhang/"><img width="240" height="240" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/yichi-zhang-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/yichi-zhang-web.jpg 240w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/yichi-zhang-web-150x150.jpg 150w" sizes="(max-width: 240px) 100vw, 240px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/yichi-zhang/">Yichi Zhang</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Professor </p>\n\t\t\n\t\t\t\t<p class="people-department">Statistics</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:yichizhang@uri.edu">yichizhang@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/guangyu-zhu/"><img width="200" height="200" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Guangyu-Zhu-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Guangyu-Zhu-web.jpg 200w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Guangyu-Zhu-web-150x150.jpg 150w" sizes="(max-width: 200px) 100vw, 200px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/guangyu-zhu/">Guangyu Zhu</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Statistics</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:guangyuzhu@uri.edu">guangyuzhu@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n</div>\n<p>\n<h2>Adjunct Faculty and Limited Join Appointments</h2>\n</p>\n<div class="uri-people-tool cl-tiles halves"><div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/ashley-buchanan/"><img width="966" height="966" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan.jpg 966w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan-300x300.jpg 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan-150x150.jpg 150w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan-768x768.jpg 768w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan-364x364.jpg 364w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan-500x500.jpg 500w" sizes="(max-width: 966px) 100vw, 966px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/ashley-buchanan/">Ashley Buchanan</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Limited Joint Appointment</p>\n\t\t\n\t\t\t\t<p class="people-department">Biostatistics</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><span class="p-tel">401.874.4739</span> &ndash; <a class="u-email" href="mailto:buchanan@uri.edu">buchanan@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/nina-kajiji/"><img width="125" height="125" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/nina-kajiji-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/nina-kajiji/">Nina Kajiji</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Adjunct Associate Professor</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><a class="u-email" href="mailto:nina@uri.edu">nina@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/rachel-schwartz/"><img width="120" height="120" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Rachel-Schwartz-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/rachel-schwartz/">Rachel Schwartz</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Professor \xe2\x80\x93 Limited Joint Appointment</p>\n\t\t\n\t\t\t\t<p class="people-department">Biological Sciences</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><span class="p-tel">401.874.5404</span> &ndash; <a class="u-email" href="mailto:rsschwartz@uri.edu">rsschwartz@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n<div class="peopleitem h-card has-thumbnail">\n\t<header>\n\t\t<div class="header">\n\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t<a href="https://web.uri.edu/cs/meet/ying-zhang/"><img width="249" height="250" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/ying-zhang-web.jpg" class="u-photo  wp-post-image" alt="" loading="lazy" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/ying-zhang-web.jpg 249w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/ying-zhang-web-150x150.jpg 150w" sizes="(max-width: 249px) 100vw, 249px" /></a>\n\t\t\t\t\t\t\t</figure>\n\t\t\t\n\t\t\t\t\t\t\t<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/ying-zhang/">Ying Zhang</a></h3>\n\t\t\t\n\t\t\t\n\t\t</div>\n\t</header>\n\t<div class="inside">\n\n\t\t<p class="people-title p-job-title">Assistant Professor \xe2\x80\x93 Limited Joint Appointment</p>\n\t\t\n\t\t\t\t<p class="people-department">Computer Science</p>\n\t\t\n\t\t\n\t\t\t\t\t<p class="people-misc"><span class="p-tel">401.874.4915</span> &ndash; <a class="u-email" href="mailto:yingzhang@uri.edu">yingzhang@uri.edu</a></p>\n\t\t\n\t\t<div style="clear:both;"></div>\n\t</div>\n</div>\n</div>\n<p>\n\t</div><!-- .entry-content -->\n\n\t</article><!-- #post-## -->\n\n\t</main><!-- #main -->\n\n\n\t</div><!-- #content -->\n\n\t\n\t<div id="actionbar-wrapper">\n\t\t<div id="actionbar" role="menu">\n\t\t\t<a href="https://www.uri.edu/connect/?utm_campaign=request-info&#038;utm_source=action-bar&#038;utm_medium=web" id="action-connect" role="menuitem"><span role="presentation" title="Learn more about URI: Get in touch"></span>Connect</a><a href="https://www.uri.edu/apply" id="action-apply" role="menuitem"><span role="presentation"></span>Apply</a><a href="https://www.uri.edu/tour" id="action-tour" role="menuitem"><span role="presentation"></span>Tour</a><a href="https://www.uri.edu/give" id="action-give" role="menuitem"><span role="presentation"></span>Give</a>\t\t</div>\n\t</div><!-- #actionbar-wrapper -->\n\n\t<footer id="globalfooter">\n\t\t<div id="basement">\n\t\t\t<div id="storagebins">\n\t\t\t\t<div id="sb-university">\n\t\t\t\t\t<input id="sb-university-toggle" type="radio" name="storagebin" value="university" role="presentation" checked>\n\t\t\t\t\t<label for="sb-university-toggle" aria-label="Open the University footer menu when browsing on mobile."><span>University</span></label>\n\t\t\t\t\t<ul role="menu" aria-label="The University footer menu.">\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/about/leadership/" role="menuitem">Leadership</a></li>\n\t\t\t\t\t\t<li><a href="https://web.uri.edu/diversity/" role="menuitem">Diversity and Inclusion</a></li>\n\t\t\t\t\t\t<li><a href="https://web.uri.edu/global/" role="menuitem">Global</a></li>\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/about/campuses/" role="menuitem">Campuses</a></li>\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/safety/" role="menuitem">Safety</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div id="sb-campus-life">\n\t\t\t\t\t<input id="sb-campus-life-toggle" type="radio" name="storagebin" value="campus-life" role="presentation">\n\t\t\t\t\t<label for="sb-campus-life-toggle" aria-label="Open the Campus Life footer menu when browsing on mobile."><span>Campus Life</span></label>\n\t\t\t\t\t<ul role="menu" aria-label="The Campus Life footer menu.">\n\t\t\t\t\t\t<li><a href="https://web.uri.edu/housing/" role="menuitem">Housing</a></li>\n\t\t\t\t\t\t<li><a href="https://web.uri.edu/dining/" role="menuitem">Dining</a></li>\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/athletics/" role="menuitem">Athletics and Recreation</a></li>\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/campus-life/health-and-wellness/" role="menuitem">Health and Wellness</a></li>\n\t\t\t\t\t\t<li><a href="https://events.uri.edu" role="menuitem">Events</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div id="sb-academics">\n\t\t\t\t\t<input id="sb-academics-toggle" type="radio" name="storagebin" value="academics" role="presentation">\n\t\t\t\t\t<label for="sb-academics-toggle" aria-label="Open the Academics footer menu when browsing on mobile."><span>Academics</span></label>\n\t\t\t\t\t<ul role="menu" aria-label="The Academics footer menu.">\n\t\t\t\t\t\t<li><a href="https://www.uri.edu/academics/" role="menuitem">Undergraduate</a></li>\n\t\t\t\t\t\t<li><a href="https://web.uri.edu/graduate-school/" role="menuitem">Graduate</a></li>\n\t\t\t\t\t\t<li><a href="https://web.uri.edu/advising/" role="menuitem">Advising</a></li>\n\t\t\t\t\t\t<li><a href="https://web.uri.edu/library/" role="menuitem">Libraries</a></li>\n\t\t\t\t\t\t<li><a href="https://web.uri.edu/career/students/" role="menuitem">Internships</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id="gimmicks">\n\t\t\t\t<!-- Tides Widget -->\n\t\t\t\t<div class="uri-tides-widget darkmode" data-station="8454049" " data-height="22"><span class="status"></span></div>\n\t\t\t\t\t\t\t\t<hr>\n\t\t\t\t\n\t\t\t\t<!-- Social Media Component -->\n\t\t\t\t<aside class="cl-wrapper cl-social-wrapper"><ul class="cl-social light  "><li><a href="https://www.facebook.com/universityofri" class="cl-social-facebook" title="Facebook">Facebook</a></li><li><a href="https://www.instagram.com/universityofri/" class="cl-social-instagram" title="Instagram">Instagram</a></li><li><a href="https://twitter.com/universityofri" class="cl-social-twitter" title="Twitter">Twitter</a></li><li><a href="https://www.youtube.com/user/UniversityOfRI" class="cl-social-youtube" title="YouTube">YouTube</a></li></ul></aside>\t\t\t</div>\n\t\t</div>\n\t\t<div id="tagline"></div>\n\t\t<div id="legal">\n\t\t\t<p>Copyright &copy; <a class="subtle" href="http://www.uri.edu/">University of Rhode Island</a> | University of Rhode Island, Kingston, RI 02881, USA | 1.401.874.1000</p>\n\t\t\t<p>URI is an equal opportunity employer committed to the principles of affirmative action.&nbsp;&nbsp;<a class="jobs" href="https://jobs.uri.edu/">Work at URI</a></p>\n\t\t</div>\n\t</footer><!-- #globalfooter -->\n</div><!-- #page -->\n\n<link rel=\'stylesheet\' id=\'uri-tides-css-css\'  href=\'https://web.uri.edu/cs/wp-content/plugins/uri-tides-1.2/css/tides.css?ver=5.7.1\' type=\'text/css\' media=\'all\' />\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-content/plugins/uri-component-library/js/cl.built.js?ver=20221219\' id=\'uricl-js-js\'></script>\n<script type=\'text/javascript\' id=\'wp-jquery-lightbox-js-extra\'>\n/* <![CDATA[ */\nvar JQLBSettings = {"fitToScreen":"0","resizeSpeed":"400","displayDownloadLink":"0","navbarOnTop":"0","loopImages":"","resizeCenter":"","marginSize":"","linkTarget":"","help":"","prevLinkTitle":"previous image","nextLinkTitle":"next image","prevLinkText":"\\u00ab Previous","nextLinkText":"Next \\u00bb","closeTitle":"close image gallery","image":"Image ","of":" of ","download":"Download","jqlb_overlay_opacity":"80","jqlb_overlay_color":"#000000","jqlb_overlay_close":"1","jqlb_border_width":"10","jqlb_border_color":"#ffffff","jqlb_border_radius":"0","jqlb_image_info_background_transparency":"100","jqlb_image_info_bg_color":"#ffffff","jqlb_image_info_text_color":"#000000","jqlb_image_info_text_fontsize":"10","jqlb_show_text_for_image":"1","jqlb_next_image_title":"next image","jqlb_previous_image_title":"previous image","jqlb_next_button_image":"https:\\/\\/web.uri.edu\\/cs\\/wp-content\\/plugins\\/wp-lightbox-2\\/styles\\/images\\/next.gif","jqlb_previous_button_image":"https:\\/\\/web.uri.edu\\/cs\\/wp-content\\/plugins\\/wp-lightbox-2\\/styles\\/images\\/prev.gif","jqlb_maximum_width":"","jqlb_maximum_height":"","jqlb_show_close_button":"1","jqlb_close_image_title":"close image gallery","jqlb_close_image_max_heght":"22","jqlb_image_for_close_lightbox":"https:\\/\\/web.uri.edu\\/cs\\/wp-content\\/plugins\\/wp-lightbox-2\\/styles\\/images\\/closelabel.gif","jqlb_keyboard_navigation":"1","jqlb_popup_size_fix":"0"};\n/* ]]> */\n</script>\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-content/plugins/wp-lightbox-2/js/dist/wp-lightbox-2.min.js?ver=1.3.4.1\' id=\'wp-jquery-lightbox-js\'></script>\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-content/themes/uri-modern/js/navigation.js?ver=2.4.4\' id=\'uri-modern-navigation-js\'></script>\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-content/themes/uri-modern/js/smoothscroll.min.js?ver=2.4.4\' id=\'uri-modern-smoothscroll-js\'></script>\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-content/themes/uri-modern/js/skip-link-focus-fix.js?ver=2.4.4\' id=\'uri-modern-skip-link-focus-fix-js\'></script>\n<script type=\'text/javascript\' id=\'uri-modern-scripts-js-extra\'>\n/* <![CDATA[ */\nvar URIMODERN = {"base":"https:\\/\\/web.uri.edu\\/cs","path":{"page":"https:\\/\\/web.uri.edu\\/cs\\/people\\/","theme":"https:\\/\\/web.uri.edu\\/cs\\/wp-content\\/themes\\/uri-modern","themes":"https:\\/\\/web.uri.edu\\/cs\\/wp-content\\/themes","plugins":"https:\\/\\/web.uri.edu\\/cs\\/wp-content\\/plugins"},"theme":{"name":"URI Modern","version":"2.4.4","textDomain":"uri"},"is":{"404":false,"childTheme":false,"admin":false},"features":[]};\n/* ]]> */\n</script>\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-content/themes/uri-modern/js/script.min.js?ver=2.4.4\' id=\'uri-modern-scripts-js\'></script>\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-content/plugins/page-links-to/dist/new-tab.js?ver=3.3.5\' id=\'page-links-to-js\'></script>\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-includes/js/wp-embed.min.js?ver=5.7.1\' id=\'wp-embed-js\'></script>\n<script type=\'text/javascript\' id=\'uri-tides-js-extra\'>\n/* <![CDATA[ */\nvar tides = {"temperature":{"metadata":{"id":"8454049","name":"Quonset Point","lat":"41.5868","lon":"-71.4110"},"data":[{"t":"2022-12-19 21:00","v":"43.9","f":"0,0,0"}]},"tide":{"predictions":[{"t":"2022-12-18 01:05","v":"0.436","type":"L"},{"t":"2022-12-18 07:49","v":"3.398","type":"H"},{"t":"2022-12-18 13:57","v":"0.543","type":"L"},{"t":"2022-12-18 20:06","v":"3.020","type":"H"},{"t":"2022-12-19 01:57","v":"0.218","type":"L"},{"t":"2022-12-19 08:45","v":"3.689","type":"H"},{"t":"2022-12-19 14:57","v":"0.295","type":"L"},{"t":"2022-12-19 21:07","v":"3.142","type":"H"},{"t":"2022-12-20 02:47","v":"-0.041","type":"L"},{"t":"2022-12-20 09:43","v":"4.035","type":"H"},{"t":"2022-12-20 15:49","v":"0.032","type":"L"},{"t":"2022-12-20 22:07","v":"3.353","type":"H"},{"t":"2022-12-21 03:35","v":"-0.304","type":"L"},{"t":"2022-12-21 10:38","v":"4.392","type":"H"},{"t":"2022-12-21 16:38","v":"-0.200","type":"L"},{"t":"2022-12-21 23:02","v":"3.605","type":"H"}]},"date":"1671484206","expires_on":"1671484506"};\n/* ]]> */\n</script>\n<script type=\'text/javascript\' src=\'https://web.uri.edu/cs/wp-content/plugins/uri-tides-1.2/js/tides.js?ver=5.7.1\' id=\'uri-tides-js\'></script>\n<!--\n####################################     ####################################\n####################################     #|================================|#\n################VoV#################     #|___    ___          __  ___  __ |#\n###############/ _ \\################     #| | |_|  |  |\\ | |/  |_)  |  /__ |#\n###############V==)/\\###############     #| | | | _|_ | \\| |\\  |_) _|_ \\_| |#\n##############/=/ ||=|##############     #|              _    _   _        |#\n########o(___/=/  _______)o#########     #|      \\    / |_   | \\ / \\       |#\n############/=/#| |=/###############     #|       \\/\\/  |_   |_/ \\_/       |#\n############|=|#| |#################     #|                                |#\n#############\\=\\| |#################     #|            .~~~~~~.            |#\n##############A=| |#################     #|          ~~~~######~~          |#\n######o#########| |\\########o#######     #|         ~~~~########~~         |#\n######|````A####| |=\\##A````|#######     #|         ~~~~~#######~~         |#\n######| _ \\####V   \\=\\##/ _ |#######     #|         ~~~~~###~~#~~~         |#\n######A/#s `s==\\___/=/s` s#\\A#######     #|          ~~~~~##~~~~~          |#\n##########s. `\\=====/  .s###########     #|___________`-~~~~#~-`___________|#\n###########|\'.__```__.\'#############     #|############_-====-_ ###########|#\n###########|=|###`##################     #|##########/`    .   `\\##########|#\n############\\_\\#####################     #|#########/   {-||-}   \\#########|#\n##############V#####################     #|#########(   --||--   )#########|#\n####|``|############################     #|#########\\ =\\\\-\\/-//= /#########|#\n####|  |  \\V/  _ \\\\____ \\V/ __ \\####     #|##########\\.  ====  ./##########|#\n####|   Y  |  (_) |  |_) |  ___/####     #|###########`-______-`###########|#\n####|___|__/\\____/|  ___/A\\____)####     #|################################|#\n##################|_|###############     #|################################|#\n####################################     ####################################\n|==================================|     |==================================|\n|`                                `|     |`                                `|\n|    THE STATE OF RHODE ISLAND     |     |  THE UNIVERSITY OF RHODE ISLAND  |\n|             ~ 1636 ~             |     |             ~ 1892 ~             |\n|.                                .|     |.                                .|\n|==================================|     |==================================|\n####################################     ####################################\n-->\n\n<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-efb76a2da79a549a60d","applicationID":"1015449156","transactionName":"MVRUMkMAVxdWV0daCwgedwVFCFYKGERSVAE=","queueTime":0,"applicationTime":242,"atts":"HRNXRAsaRBk=","errorBeacon":"bam.nr-data.net","agent":""}</script></body>\n</html>\n'

But we do not need to manually write search tools, that’s what BeautifulSoup is for.

cs_people = BeautifulSoup(cs_people_html,'html.parser')

In this object we can use any tag from the file and get back the first instance

cs_people.a
<a class="skip-link screen-reader-text" href="#content">Skip to content</a>
cs_people.h3
<h3 class="p-name"><a href="https://web.uri.edu/cs/meet/marco-alvarez/">Marco Alvarez</a></h3>

More helpful is the find_all method we wnat to find all div tags that are “peopleitem” class. We decided this by inspecting the code on the website.

cs_people.find_all("div","peopleitem")
[<div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/marco-alvarez/"><img alt="" class="u-photo wp-post-image" height="120" loading="lazy" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/marco-alvarez.png" width="120"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/marco-alvarez/">Marco Alvarez</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Associate Professor | Director of Graduate Studies</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><span class="p-tel">401.874.5009</span> – <a class="u-email" href="mailto:malvarez@uri.edu">malvarez@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card">
 <header>
 <div class="header">
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/samantha-armenti/">Samantha Armenti</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Teaching Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:sarmenti@uri.edu ">sarmenti@uri.edu </a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/sarah-brown/"><img alt="" class="u-photo wp-post-image" height="300" loading="lazy" sizes="(max-width: 300px) 100vw, 300px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Sarah-Brown.png" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Sarah-Brown.png 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Sarah-Brown-150x150.png 150w" width="300"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/sarah-brown/">Sarah Brown</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:brownsarahm@uri.edu">brownsarahm@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/michael-conti/"><img alt="" class="u-photo wp-post-image" height="2475" loading="lazy" sizes="(max-width: 2560px) 100vw, 2560px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-scaled.jpg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-scaled.jpg 2560w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-300x290.jpg 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-1024x990.jpg 1024w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-768x743.jpg 768w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-1536x1485.jpg 1536w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-2048x1980.jpg 2048w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-364x352.jpg 364w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-500x483.jpg 500w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-1000x967.jpg 1000w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-1280x1238.jpg 1280w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/mike-conti-2000x1934.jpg 2000w" width="2560"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/michael-conti/">Michael Conti</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Teaching Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:michaelconti@uri.edu ">michaelconti@uri.edu </a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/noah-daniels/"><img alt="" class="u-photo wp-post-image" height="219" loading="lazy" sizes="(max-width: 219px) 100vw, 219px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/noah-daniels-web.png" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/noah-daniels-web.png 219w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/noah-daniels-web-150x150.png 150w" width="219"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/noah-daniels/">Noah Daniels</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:noah_daniels@uri.edu">noah_daniels@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/lisa-dipippo/"><img alt="" class="u-photo wp-post-image" height="126" loading="lazy" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/lisa-dipippo-web.jpg" width="125"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/lisa-dipippo/">Lisa DiPippo</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Professor | Chair</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:ldipippo@uri.edu">ldipippo@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/victor-fay-wolfe/"><img alt="" class="u-photo wp-post-image" height="125" loading="lazy" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/victor-fay-wolfe-web.jpg" width="125"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/victor-fay-wolfe/">Victor Fay-Wolfe</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:vfaywolfe@uri.edu">vfaywolfe@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card">
 <header>
 <div class="header">
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/lutz-hamel/">Lutz Hamel</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Associate Professor </p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:lutzhamel@uri.edu">lutzhamel@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/abdeltawab-hendawi/"><img alt="" class="u-photo wp-post-image" height="885" loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1.jpeg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1.jpeg 1000w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1-300x266.jpeg 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1-768x680.jpeg 768w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1-364x322.jpeg 364w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-1-500x443.jpeg 500w" width="1000"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/abdeltawab-hendawi/">Abdeltawab Hendawi</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Professor</p>
 <p class="people-department">Data Science | Computer Science</p>
 <p class="people-misc"><span class="p-tel">401.874.5738</span> – <a class="u-email" href="mailto:hendawi@uri.edu">hendawi@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/jean-yves-herve/"><img alt="" class="u-photo wp-post-image" height="299" loading="lazy" sizes="(max-width: 300px) 100vw, 300px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/jean-yves-herve-web.jpg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/jean-yves-herve-web.jpg 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/jean-yves-herve-web-150x150.jpg 150w" width="300"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/jean-yves-herve/">Jean-Yves Hervé</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Associate Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:jyh@cs.uri.edu">jyh@cs.uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/natallia-katenka/"><img alt="" class="u-photo wp-post-image" height="200" loading="lazy" sizes="(max-width: 200px) 100vw, 200px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/natalia-katenka-web.jpg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/natalia-katenka-web.jpg 200w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/natalia-katenka-web-150x150.jpg 150w" width="200"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/natallia-katenka/">Natallia Katenka</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Associate Professor | Director of Undergraduate Studies</p>
 <p class="people-department">Statistics</p>
 <p class="people-misc"><a class="u-email" href="mailto:nkatenka@uri.edu">nkatenka@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card">
 <header>
 <div class="header">
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/soheyb-kouider/">Soheyb Kouider</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Associate Teaching Professor</p>
 <p class="people-department">Statistics</p>
 <p class="people-misc"><span class="p-tel">401.874.2562</span> – <a class="u-email" href="mailto:soheyb@uri.edu">soheyb@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/edmund-lamagna/"><img alt="" class="u-photo wp-post-image" height="150" loading="lazy" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/edmund-lamagna-web.jpg" width="150"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/edmund-lamagna/">Edmund Lamagna</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:eal@cs.uri.edu">eal@cs.uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/indrani-mandal/"><img alt="" class="u-photo wp-post-image" height="280" loading="lazy" sizes="(max-width: 278px) 100vw, 278px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/0.jpeg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/0.jpeg 278w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/0-150x150.jpeg 150w" width="278"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/indrani-mandal/">Indrani Mandal</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Teaching Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:indrani_mandal@uri.edu ">indrani_mandal@uri.edu </a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/gavino-puggioni/"><img alt="" class="u-photo wp-post-image" height="1600" loading="lazy" sizes="(max-width: 1600px) 100vw, 1600px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381.jpg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381.jpg 1600w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-300x300.jpg 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-1024x1024.jpg 1024w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-150x150.jpg 150w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-768x768.jpg 768w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-1536x1536.jpg 1536w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-364x364.jpg 364w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-500x500.jpg 500w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-1000x1000.jpg 1000w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Gavino_headshot1-e1610666088381-1280x1280.jpg 1280w" width="1600"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/gavino-puggioni/">Gavino Puggioni</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Associate Professor |  Statistics Section Head | Director of Graduate Studies</p>
 <p class="people-department">Statistics</p>
 <p class="people-misc"><span class="p-tel">401.874.4388</span> – <a class="u-email" href="mailto:gpuggioni@uri.edu">gpuggioni@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card">
 <header>
 <div class="header">
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/jonathan-schrader/">Jonathan Schrader</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Teaching Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:jonathan.schrader@uri.edu">jonathan.schrader@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/krishna-venkatasubramanian/"><img alt="" class="u-photo wp-post-image" height="2703" loading="lazy" sizes="(max-width: 2437px) 100vw, 2437px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2.jpg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2.jpg 2437w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-270x300.jpg 270w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-768x852.jpg 768w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-923x1024.jpg 923w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-364x404.jpg 364w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-500x555.jpg 500w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-1000x1109.jpg 1000w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-1280x1420.jpg 1280w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/KV_biopic_2-2000x2218.jpg 2000w" width="2437"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/krishna-venkatasubramanian/">Krishna Venkatasubramanian</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:krish@uri.edu">krish@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/jing-wu/"><img alt="" class="u-photo wp-post-image" height="200" loading="lazy" sizes="(max-width: 200px) 100vw, 200px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/jing-wu-web.jpg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/jing-wu-web.jpg 200w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/jing-wu-web-150x150.jpg 150w" width="200"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/jing-wu/">Jing Wu</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Associate Professor</p>
 <p class="people-department">Statistics</p>
 <p class="people-misc"><span class="p-tel">401.874.4504</span> – <a class="u-email" href="mailto:jing_wu@uri.edu">jing_wu@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/yichi-zhang/"><img alt="" class="u-photo wp-post-image" height="240" loading="lazy" sizes="(max-width: 240px) 100vw, 240px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/yichi-zhang-web.jpg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/yichi-zhang-web.jpg 240w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/yichi-zhang-web-150x150.jpg 150w" width="240"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/yichi-zhang/">Yichi Zhang</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Professor </p>
 <p class="people-department">Statistics</p>
 <p class="people-misc"><a class="u-email" href="mailto:yichizhang@uri.edu">yichizhang@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/guangyu-zhu/"><img alt="" class="u-photo wp-post-image" height="200" loading="lazy" sizes="(max-width: 200px) 100vw, 200px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Guangyu-Zhu-web.jpg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Guangyu-Zhu-web.jpg 200w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Guangyu-Zhu-web-150x150.jpg 150w" width="200"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/guangyu-zhu/">Guangyu Zhu</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Professor</p>
 <p class="people-department">Statistics</p>
 <p class="people-misc"><a class="u-email" href="mailto:guangyuzhu@uri.edu">guangyuzhu@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/ashley-buchanan/"><img alt="" class="u-photo wp-post-image" height="966" loading="lazy" sizes="(max-width: 966px) 100vw, 966px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan.jpg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan.jpg 966w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan-300x300.jpg 300w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan-150x150.jpg 150w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan-768x768.jpg 768w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan-364x364.jpg 364w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/Ashley-Buchanan-500x500.jpg 500w" width="966"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/ashley-buchanan/">Ashley Buchanan</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Limited Joint Appointment</p>
 <p class="people-department">Biostatistics</p>
 <p class="people-misc"><span class="p-tel">401.874.4739</span> – <a class="u-email" href="mailto:buchanan@uri.edu">buchanan@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/nina-kajiji/"><img alt="" class="u-photo wp-post-image" height="125" loading="lazy" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/nina-kajiji-web.jpg" width="125"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/nina-kajiji/">Nina Kajiji</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Adjunct Associate Professor</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><a class="u-email" href="mailto:nina@uri.edu">nina@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/rachel-schwartz/"><img alt="" class="u-photo wp-post-image" height="120" loading="lazy" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/Rachel-Schwartz-web.jpg" width="120"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/rachel-schwartz/">Rachel Schwartz</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Professor – Limited Joint Appointment</p>
 <p class="people-department">Biological Sciences</p>
 <p class="people-misc"><span class="p-tel">401.874.5404</span> – <a class="u-email" href="mailto:rsschwartz@uri.edu">rsschwartz@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>,
 <div class="peopleitem h-card has-thumbnail">
 <header>
 <div class="header">
 <figure>
 <a href="https://web.uri.edu/cs/meet/ying-zhang/"><img alt="" class="u-photo wp-post-image" height="250" loading="lazy" sizes="(max-width: 249px) 100vw, 249px" src="https://web.uri.edu/cs/wp-content/uploads/sites/1531/ying-zhang-web.jpg" srcset="https://web.uri.edu/cs/wp-content/uploads/sites/1531/ying-zhang-web.jpg 249w, https://web.uri.edu/cs/wp-content/uploads/sites/1531/ying-zhang-web-150x150.jpg 150w" width="249"/></a>
 </figure>
 <h3 class="p-name"><a href="https://web.uri.edu/cs/meet/ying-zhang/">Ying Zhang</a></h3>
 </div>
 </header>
 <div class="inside">
 <p class="people-title p-job-title">Assistant Professor – Limited Joint Appointment</p>
 <p class="people-department">Computer Science</p>
 <p class="people-misc"><span class="p-tel">401.874.4915</span> – <a class="u-email" href="mailto:yingzhang@uri.edu">yingzhang@uri.edu</a></p>
 <div style="clear:both;"></div>
 </div>
 </div>]

this is a long, object and we can see it looks iterable ([ at the start)

Important

answer to questions about searching from the docs

We could search all tags for the class attribute like this:

cs_people.find_all(class="peopleitem")[0]
  Cell In[10], line 1
    cs_people.find_all(class="peopleitem")[0]
                       ^
SyntaxError: invalid syntax

We can also look at only the first instance

cs_people.find_all("peopleitem")[0]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[11], line 1
----> 1 cs_people.find_all("peopleitem")[0]

IndexError: list index out of range

We notice that the name is inside a <h3> tag with class p-name and then inside an a tag after that. We also know from looking at the overall page that there are lots of other a tags, so we do not want to search all of those.

names = [n.a.string for n in cs_people.find_all("h3","p-name")]
names
['Marco Alvarez',
 'Samantha Armenti',
 'Sarah Brown',
 'Michael Conti',
 'Noah Daniels',
 'Lisa DiPippo',
 'Victor Fay-Wolfe',
 'Lutz Hamel',
 'Abdeltawab Hendawi',
 'Jean-Yves Hervé',
 'Natallia Katenka',
 'Soheyb Kouider',
 'Edmund Lamagna',
 'Indrani Mandal',
 'Gavino Puggioni',
 'Jonathan Schrader',
 'Krishna Venkatasubramanian',
 'Jing Wu',
 'Yichi Zhang',
 'Guangyu Zhu',
 'Ashley Buchanan',
 'Nina Kajiji',
 'Rachel Schwartz',
 'Ying Zhang']

How to pull out the titles for each person (eg Assitatn Teaching Professor, Associate Professor)

titles = [t.string for t in cs_people.find_all("p","people-title")]
titles
['Associate Professor | Director of Graduate Studies',
 'Assistant Teaching Professor',
 'Assistant Professor',
 'Assistant Teaching Professor',
 'Assistant Professor',
 'Professor | Chair',
 'Professor',
 'Associate Professor ',
 'Assistant Professor',
 'Associate Professor',
 'Associate Professor | Director of Undergraduate Studies',
 'Associate Teaching Professor',
 'Professor',
 'Assistant Teaching Professor',
 'Associate Professor |  Statistics Section Head | Director of Graduate Studies',
 'Assistant Teaching Professor',
 'Assistant Professor',
 'Associate Professor',
 'Assistant Professor ',
 'Assistant Professor',
 'Limited Joint Appointment',
 'Adjunct Associate Professor',
 'Assistant Professor – Limited Joint Appointment',
 'Assistant Professor – Limited Joint Appointment']

We can pull out two more things, the people-department indicates who is CS & who is Statistics.

disciplines = [d.string for d in cs_people.find_all("p",'people-department')]
emails = [e.string for e in cs_people.find_all("a",'u-email')]
css_fac_df = pd.DataFrame({'name':names, 'title':titles,'e-mails':emails, 'discipline':disciplines})
css_fac_df
name title e-mails discipline
0 Marco Alvarez Associate Professor | Director of Graduate Stu... malvarez@uri.edu Computer Science
1 Samantha Armenti Assistant Teaching Professor sarmenti@uri.edu Computer Science
2 Sarah Brown Assistant Professor brownsarahm@uri.edu Computer Science
3 Michael Conti Assistant Teaching Professor michaelconti@uri.edu Computer Science
4 Noah Daniels Assistant Professor noah_daniels@uri.edu Computer Science
5 Lisa DiPippo Professor | Chair ldipippo@uri.edu Computer Science
6 Victor Fay-Wolfe Professor vfaywolfe@uri.edu Computer Science
7 Lutz Hamel Associate Professor lutzhamel@uri.edu Computer Science
8 Abdeltawab Hendawi Assistant Professor hendawi@uri.edu Data Science | Computer Science
9 Jean-Yves Hervé Associate Professor jyh@cs.uri.edu Computer Science
10 Natallia Katenka Associate Professor | Director of Undergraduat... nkatenka@uri.edu Statistics
11 Soheyb Kouider Associate Teaching Professor soheyb@uri.edu Statistics
12 Edmund Lamagna Professor eal@cs.uri.edu Computer Science
13 Indrani Mandal Assistant Teaching Professor indrani_mandal@uri.edu Computer Science
14 Gavino Puggioni Associate Professor | Statistics Section Head... gpuggioni@uri.edu Statistics
15 Jonathan Schrader Assistant Teaching Professor jonathan.schrader@uri.edu Computer Science
16 Krishna Venkatasubramanian Assistant Professor krish@uri.edu Computer Science
17 Jing Wu Associate Professor jing_wu@uri.edu Statistics
18 Yichi Zhang Assistant Professor yichizhang@uri.edu Statistics
19 Guangyu Zhu Assistant Professor guangyuzhu@uri.edu Statistics
20 Ashley Buchanan Limited Joint Appointment buchanan@uri.edu Biostatistics
21 Nina Kajiji Adjunct Associate Professor nina@uri.edu Computer Science
22 Rachel Schwartz Assistant Professor – Limited Joint Appointment rsschwartz@uri.edu Biological Sciences
23 Ying Zhang Assistant Professor – Limited Joint Appointment yingzhang@uri.edu Computer Science

12.2.1. Do you have any recommendations for learning html/css for the purpose of webscraping?#

For webscraping only, careful examination of the page for patterns will be mostly enough. Rely on the nesting that the inspect or an IDE does. The following simple facts about website design will mostly be enough:

  • tags are written like <tagname>

  • classes are used to group similar tags and written like class = list of classes separated by spaces

  • ids are used to “name” specific instances of tags like id=section-qa

  • the other values inside tags are called attributes (class, id, href are attributes)

  • the <a> tag is for links and it written like <a href="url">link text</a>

I will look for some examples, though.

12.3. Is there a way to search just one person with that method?#

We definitely can after pulling all the names, but the scraping is really for pulling the structure and reformatting batches of information more than finding a single thing. For finding one thing, there are better tools.

12.3.1. what all the little commands in the inspection of a website are for?#

12.3.2. How do you know what to use to iterate through values in the HTML?#

I knew I wanted the to look at each person, that was the information I wanted from the page, from visual inspection. Then I inspected on one of the boxes about a person and noticed that they were a div tag with peopleitem class. I actually decided just the way we did it in class.

In the card for one person, I found each piece of information I wanted and then looked for the closest tag. I also tried things that did not work before class to work out an example that would work, but whe you are learning new things, that is how it works. Letting the computer tell you that you made a mistake is totally fine! Try things and experiment. Errors are okay.

12.3.3. How to use the find_all feature for just the class name?#

use it as a keyword parameter like class=

12.3.4. Can we get more practice webscraping and using the .find_all() function?#

Try pulling additional information from this page (like the webpage for each person) and the information from that page.

12.3.5. Will making a DataFrame via web scraping be use the DataFrame constructor, or is there more to it?#

Use the constructor !