68 votes

Scraping Web dans une extension Google Chrome (JavaScript + API de Chrome)

Quelles sont les meilleures options pour réaliser Scraping web d'un onglet non ouvert à partir d'une extension Google Chrome avec JavaScript et toutes les autres technologies disponibles. D'autres bibliothèques JavaScript sont également acceptées.

L'important est de masquer le raclage pour qu'il se comporte comme une requête web normale. . Aucune indication d'AJAX ou de XMLHttpRequest, comme X-Requested-With: XMLHttpRequest o Origin .

Le contenu extrait doit être accessible à partir de JavaScript pour être manipulé et présenté dans l'extension, très probablement sous forme de chaîne.

Existe-t-il des crochets dans les API spécifiques à WebKit/Chrome qui peuvent être utilisés pour effectuer une requête web normale et obtenir les résultats pour les manipuler ?

var pageContent = getPageContent(url); // TODO: Implement
var items = $(pageContent).find('.item');
// Display items with further selections

Points bonus pour que cela fonctionne à partir d'un fichier local sur le disque. pour le débogage initial. Mais si c'est le seul moyen d'arrêter une solution, alors ne tenez pas compte des points bonus.

12voto

Eli Grey Points 17553

Tenter d'utiliser XHR2 responseType = "document" et se rabattre sur (new DOMParser).parseFromString(responseText, getResponseHeader("Content-Type")) con mon text/html patch . Voir https://gist.github.com/1138724 pour un exemple de la façon dont je détecte responseType = "document support (vérification synchrone response === null sur un objet URL créé à partir d'un text/html blob).

Utilisez le API Chrome WebRequest pour cacher X-Requested-With etc.

10voto

Anshul Points 1704

Si vous cherchez quelque chose de plus qu'un plugin pour Google Chrome, regardez à phantomjs qui utilise Qt-Webkit en arrière-plan et fonctionne comme un navigateur, y compris pour les requêtes ajax. Vous pouvez l'appeler un navigateur sans tête car il n'affiche pas la sortie sur un écran et peut tranquillement travailler en arrière-plan pendant que vous faites d'autres choses. Si vous le souhaitez, vous pouvez exporter des images, des pdf à partir des pages qu'il récupère. Il fournit une interface JS pour charger des pages, cliquer sur des boutons, etc. comme dans un navigateur. Vous pouvez également injecter un JS personnalisé, par exemple jQuery, sur n'importe quelle page que vous voulez gratter et l'utiliser pour accéder au domaine et exporter les données souhaitées. Comme il utilise Webkit son comportement de rendu est exactement comme celui de Google Chrome.

Une autre option serait d'utiliser Aptana Jaxer qui est basé sur le moteur Mozilla et qui est un très bon concept en soi. Il peut également être utilisé comme un simple outil de scraping.

6voto

Novikov Points 2920

Le raclage de sites Web est un peu compliqué dans une extension Chrome. Quelques points :

  • Vous exécutez le contenu scripts pour accéder au DOM.
  • Les pages d'arrière-plan (une par navigateur) peuvent envoyer et recevoir messages au contenu scripts. En d'autres termes, vous pouvez exécuter un scripts de contenu qui configure un point de terminaison RPC et déclenche un callback spécifié dans le contexte de la page d'arrière-plan en tant que réponse.
  • Vous pouvez exécuter des scripts de contenu dans tous les cadres d'une page web, puis assembler l'arbre documentaire (composé des 1..N cadres que contient la page).
  • Comme l'a suggéré S.K., votre page d'arrière-plan peut envoyer les données sous la forme d'une requête XMLHttpRequest à une sorte de serveur HTTP léger qui écoute localement.

5voto

Steve K. Points 620

Je ne suis pas sûr que ce soit entièrement possible avec juste JavaScript, mais si vous pouvez mettre en place un script PHP dédié pour votre extension qui utilise cURL pour récupérer le HTML d'une page, le script PHP pourrait scrapper la page pour vous et votre extension pourrait la lire à travers une requête AJAX.

Cependant, la page qui fait l'objet du raclage ne sait pas qu'il s'agit d'une requête AJAX, car elle est accessible via cURL.

4voto

Dmitry Chichkov Points 102

Je pense que vous pouvez commencer par ceci exemple .

Vous pouvez donc essayer d'utiliser la combinaison Extension + Plugin. L'extension aurait accès au DOM (y compris le plugin) et piloterait le processus. Et le plugin enverrait les demandes HTTP réelles.

Je peux recommander l'utilisation de Firebreath comme plateforme de plugins Chrome/Firefox multiplateforme, en particulier jetez un œil à cet exemple : Firebreath - Faire+HTTP+Requêtes+avec+SimpleStreamsHelper

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X