Alexandre Cebeillac (Post-Doc UMR IDEES)
Sébastien Rey-Coyrehourcq (IGR UMR IDEES)
15 nov. 2019 -Paris
Axe SMS - 7 juin
Déroulement de la présentation :
Première partie
* Généralités sur Internet
* Principe de collecte des données
Deuxième partie
exemples d'utilisations avec contexte, méthodes, limite et application
Avec API
* Bing
* Flightradar
* Airbnb
Sans API
* Géocache
* MarineTraffic
Conclusion
Difficulté technique
problèméthique
ou ? comment ?
combien de temps ?
comment ?
combien de temps ?
Src : cat.opidor
Src : IT Crowd, S03Ep4
Tim bernard lee (gauche), inventor of the WWW (1989)
Vint Cerf (droite), co-inventeur du protocole Tcp/Ip
Internet : 1969 - 2019 (50 ans en octobre)
World Wide Web : 1989 - 2019 (30 ans en octobre)
1ère couche : Infrastructures physiques
"LOGIN"
ex: TCP/IP
2 ème couche : Protocoles !
Résolution DNS
1.2.2.1
2.4.3.1
5.1.1.2
3.4.2.1
2.4.3.1
5.1.1.2
6.1.4.2
DNS
DNS
DNS
en.wikipedia.org = ?
see 2.4.3.1
DNS .org
see 5.1.1.2
DNS
wikipedia.org
see 6.1.4.2
DNS
xxx.wikipedia.org
en.wikipedia.org = 6.1.4.2
6.1.4.2
3.4.2.1
HTTP
Résolution HTTP (en théorie)
GET / /HTTP/1.1
Host: en.wikipedia.orgHTTP/1.1 200 OK
...
<html>
<head>
<title>Wikipedia EN</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>Synchrone
Une page HTML ?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style.css">
<title>Test</title>
</head>
<body>
<h1> Ma page web </h1>
<p> Hello World </p>
</body>
<script src="js/script.js"></script>
</html>let d = new Date();
document.body.innerHTML = "<h1>Today's date is " + d + "</h1>"body {
background-color: #0080ff;
}
h1 {
color: #fff;
font-family: Arial, Helvetica, sans-serif;
}
html
head
title
body
h1
p
Extraction
(xPath, CSS, Regex, etc.)
SGBD
Navigateurs
wrapper
selenium
python
R
Xml
Curl
SSL
choisir la bonne entrée en fonction des usages
rtweet
WikipediR
Collect lib.
Extract lib.
lxml
bs4
html5lib
urllib3
requests
selenium
pyCurl
Collect lib.
Extract lib.
xml2
selectr
stringr
httr
selenium
curl
rvest
scrapy
PYTHON
R
choisir la bonne entrée en fonction des usages
Tweepy
ANR Escape (2016 - 2020) / Eric Daudé
"Contribuer à la conception de systèmes d’aide à la décision dans le cas d’évacuations massives"
Un des objectifs :
Simuler les mobilités en cas de catastrophes (industrielles ou naturelles). Multisites
Comment ?
Simulation à base d'agents
Préalable :
Connaître les comportements de mobilités en condition "normale"
==> Intérêt des conditions de trafic
(en plus des EMD)
Site web : /www.bing.com/maps
Langage : R
Type de récolte : Campagne
Format : Raster (image)
Avantages & limites :
Principe :
Bing Map (Microsoft)
Collecte en temps réel des conditions de circulation
Exemple : Bing Map (Microsoft)
Collecte en temps réel des conditions de circulation
"As part of efforts on learning about traffic flows from data, researchers at Microsoft Research explored methods that enhance the safety and privacy of people who wish to help with the “crowdsourcing” of real-time flows of road data from their mobile GPS data. Principles of community sensing have been developed. These principles center on working with people under a “privacy budget” based on the use of the computations of the value of information for understanding flows over time on the road network"
https://www.microsoft.com/en-us/research/project/predictive-analytics-for-traffic/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fprojects%2Fclearflow%2F
Projeter l'image connaissant :
Centre de l'image :
Longitude =1.083
Latitude = 49.4375
Niveau de zoom : 12
Projection Bing :
ici UTM 31N
Résolution d'un pixel (m) :
156543.04 * cos(lat) / (2 ^ zoom)
Première approche : capture d'écran
Prochaine étape : extraire les conditions de trafic
image avec trafic
image avec sans trafic
Masque
image avec trafic
Masque
Application Programming Interface
[ ...] is a set of features and rules that exist inside a software program (the application) enabling interaction with it through software - as opposed to a human user interface. The API can be seen as a simple contract (the interface) between the application offering it and other items, such as third party software or hardware.
2ème approche : Utiliser l'API pour récupérer une carte statique
https://dev.virtualearth.net/REST/V1/Imagery/Mapstyle/ lat,lon/zoom/?mapLayer=TrafficFlow&key=Token&autresparamètres
Adapter les paramètres pour obtenir une carte avec fond noir, sans texte :
Sélection des pixels vert, jaune et rouge
+ données comptages & enquêtes EMD
ANR PUR (2016 - 2020) / Yvette Vaguet
Intégration des zones urbaines arctiques dans le système monde
Un des objectifs :
Analyser temporellement les flux affectant les zones arctiques, notamment les flux aériens.
Comment ?
En créant des réseaux à partir des données les plus appropriées et accessibles
ANR PUR (2015 - 2019) / Yvette Vaguet
Récuperer les départs et arrivées d'avions pour les aéroports mondiaux pendant plus d'un an
Site web : flightradar24.com
Langage : Python
Framework : Scrapy
Type de récolte : Continue (depuis le 2018/06/10)
Format : mongoDB / Json
Difficultés :
flightradar
24
API REST via appel XHR
json
limité à 100 départs/arrivées
query = 'https://api.flightradar24.com/common/v1/airport.json?code= &plugin\[\]=&plugin-setting\[schedule\]\[mode\]=&plugin-setting\[schedule\]\[timestamp\]= &page= &limit=100&token='
{code} = code aéroport IATA
{page} = numéro de la page
{code}
{timestamp}
{page}
{timestamp} = date de la requête
Focus sur les données ...
src : tom gauld
1 req. ~2 secondes
~ 4 heures de collecte
2 jours en échecs
json non structuré
~ 20 Go / an
800Mo / jour
SGBD
Variabilité +/- grande des sources !
intégration : vérification,
consolidation
+ bonus RPGD
impacte
Structuration des données
Time / TimeZone Nightmare !
Les jours font 24 h
... Heure d'été ....
Un jour fait 86400 secondes
... Secondes intercalaires ....
Les timezones sont stables
... NON ....
TZ Server = UTC
... Par convention oui mais ....
GMT = UTC
Non. UTC n'a pas de DST
zachholman.com
Quelle(s) infrastructure(s) pour y arriver ?
Docker
Production
Prototypage
python
python
container
container
import/export
Quelle(s) infrastructure(s) pour y arriver ?
VM vs Docker ?
- micro-services (1 container = 1 application)
- plus simple
- plus flexible
- consome moins de ressources
- facilite la reproductibilité
Dockerfile
docker-compose.yml
Image 1
organisation logique
Quelle(s) infrastructure(s) pour y arriver ?
Clustering (louvain)
Vol vers la zone arctique
ANR PUR (2016 - 2020) / Yvette Vaguet
Intégration des zones arctiques dans le système monde
Un des objectifs :
Analyser temporellement les flux affectant les zones arctiques, dont les flux touristiques.
Pourquoi ?
"Tourism is a powerful global force that is turning the north into a Global North—tied into the Global South by facing the same global problem" (Veijola and Strauss-Mazzullo, 2019)
Comment ?
En créant des réseaux à partir des données les plus appropriées et accessibles
https://news.airbnb.com/fast-facts/
Collecter des données permettant de former un réseau de flux touristiques vers l'Arctique
Site web : airbnb.com
Langage : R
Framework : rvest / httr
Type de récolte : Campagne
Format : Json
Caractéristiques :
Liste de logements dans une fenêtre géographique donnée
Via l'API :
=> Collecte des informations
ex : host id, place id, lon/lat, etc.
Protocole :
1. Collecter les logements (listing) dans notre zone d'étude (fenêtres mobiles)
==> identifiant du propriétaire et du logement + localisation
2. Liste des personnes ayant visité un de ces logements
==> liste des personnes ayant laissé un commentaire
==> localisation du domicile (déclaré)
3. Collecter tous les commentaires concernant ces personnes.
==> Liste des personnes accueillies ou hébergées (+ localisation)
zone
d'étude
H= Host (hébergeur)
G : Guest (visiteur)
Page du logement
Commentaires :
Via l'API :
==> Date, identifiant, rôle, lieu déclaré, de toutes les personnes ayant commenté
https://www.airbnb.com/rooms/8513301
Idem pour la page de l'utilisateur : informations sur les visiteurs ou visités
Création de réseau :
Durée de la collecte : plusieurs semaines
- Hey Joe!? Where are you going (...) ?
- I'm going downtown (...)
- Uh, hey Joe, I heard you (...)
FP7 DENFREE & ANR MO3 / Eric Daudé
Modéliser et simuler les épidémies de dengue
Un des objectifs :
Comprendre le rôle des mobilités quotidiennes dans la propagation des épidémies à Bangkok & Delhi
Moyen :
Créer un modèle de mobilité, individu centré, à base d'agents (couplé à d'autres modèles)
Concept d'espace d'activité
Un des enjeux :
Collecte de données de mobilité
stream_tweets("location",token)
~300 millions d'utilisateurs
mensuels
Juin 2014 – Décembre 2015 : Bangkok (~10M Hab.)
Données brutes ~ 30M de tweets / ~300K utilisateurs
Données filtrées ⇒ 17M / ~76K utilisateurs
~1% des tweets
globaux
Majorité de tweets le soir
==> Domicile
Majorité de tweets en journée
==> Lieux de travail
?
?
Espace d'activité incomplet...
=> Couche d'utilisation du sol ? OSM ?
peu développé à Bangkok ...
Site web : google maps
Langage : Python ou R
Framework : Scrapy / httr
Type de récolte : Campagne
Format : json
Difficultés :
Collecter des informations sur l'utilisation du sol à Bangkok pour compléter l'espace d'activité Twitter
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=LAT,LON&types=*&radius=100&key=TOKEN
+ Fenêtre mobile
Bangkok :
~ 100K POI
~100 catégories
Nombre limite de requêtes quotidiennes gratuites :
~2000 jusqu'en juin 2018 ; 5 aujourd'hui
AOI: « Areas of Interest - places where there's a lot of activities and things to do (..) We determine areas of interest with an algorithmic process that allows us to highlight the areas with the highest concentration of restaurants, bars and shops »
API « Static Map »
⇒ Afficher le fond de carte (ggmap, R)
⇒ Enregistrer l’image
⇒ Extraire les pixels selon leur couleur
S’inspirer de la composition des AOI en POI
⇒ Générer de nouveaux AOI
⇒ Typologie
Pour chaque utilisateur de Twitter :
Coté modélisateur :
(Cebeillac & al, 2017,2018a,b)
Quelques précautions pour améliorer le niveau d'anonymat des personnes :
Sécurisation des données :
Printemps 2015 : Mise à jour de Twitter :
Désactivation automatique de la géolocalisation aprés l'envoi d'un message géolocalisé
web asynchrone
protection anti-bot
Javascript / AJAX
Javascript + React
"What you see is not what you get"
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style.css">
<script src="js/script.js"></script>
<title>Test</title>
</head>
<body>
<h1> Ma page web </h1>
<p> Hello World </p>
</body>
</html>div1
div2
??
??
6.1.4.2
3.4.2.1
HTTP
Content Delivery Network (CDN)
(CloudFlare, Akamai, etc.)
Mise en cache du contenu
Requêtes DNS spatialisées
Content Delivery Network (CDN)
Serveur http
(CloudFlare, Akamai, etc.)
Reverse-Proxy
détection de pattern
capcha
honey pot
filtrage ip
GRR Trenum (2015 - 2019) / Philippe Vidal
Récupérer toutes les informations sur les ~ 13000 géocaches (1/page) de Normandie à un instant t
Site web : geocaching.com
Langage : Python
Framework : Scrapy
Type de récolte : Campagne
Format : Json
Difficultés :
listes des urls
formulaire de selection
scraper 1
json
navigation dans les pages & remplissage de formulaires
URL des 726 * 20 pages
<form method="post" action="./nearest.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="aspnetForm">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__VIEWSTATEFIELDCOUNT" id="__VIEWSTATEFIELDCOUNT" value="2" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="wNwKV9Z" />
<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="jFMBVQ" />
</div>
circulation token obligatoire
listes des urls
page par cache
formulaire de selection
scraper 1
scraper 2
json
json
N commentaires par cache ...
Analyse textuelle (work in progress)
Intégration des zones arctiques dans le système monde
Flux maritime : Marine Traffic
Liste des bateaux dans un port (Murmansk) :
Dernières positions d'un bateau (Guldrangur) :
Même approche que pour Flightradar ?
403 Forbidden
Server
API générique, multi-langage (Java,Python, R, etc.) pour piloter (envoyer des commandes) à un navigateur sans utiliser l'interface graphique.
web-driver
R, Python, C#, etc.
Selenium tools
firefox
chrome
safari
etc.
Trajectoire des bateaux sur 2 jours :
pas de risque
complexe
risque elevé
simple
&
api
api
api
api XHR
api XHR
Impact sur la vie privée
VS
complexité de collecte
Méthodologique
Technique
- capture = script ad-hoc
- framework robustesse (h24/7j)
- intégration / structuration pour requetage
Théorique
- Objectif de la capture ?
- anonymisation
- dashboard / accès facile données
- reproductibilite données et scripts
- accessibilité vs sécurité données
- Qualité / Incertitude données
Propose des services & stock les données
(publicité)
Demande rarement
le consentement éclairé
Accède aux données consultable sur le site (webscrapping)
Vend ou donne des échantillons
contrôle l'utilisation (API)
Site Internet
Tiers
Entreprises privés ; Chercheurs ; (Etats?)
Utilisateur
Utilise ou contribue au service ==> participe à la création de données (+/- consciente)
(Schéma simpliste)
Traite des données
produit du contenu
Traite des données (échantillon)
produit du contenu
produit du contenu
le 13/11/2019
Merci de votre attention !
https://slides.com/sebastienreycoyrehourcq/cistscrapping