Quelles sont les meilleures options pour effectuer Web Scraping d'un onglet non ouvert depuis Google Chrome Extension avec JavaScript et toutes les autres technologies disponibles. D'autres bibliothèques JavaScript sont également acceptées.
L'important est de masquer le grattage pour se comporter comme une requête web normale. Aucune indication de AJAX ou XMLHttpRequest, comme X-Requested-With: XMLHttpRequest
ou Origin
.
Le contenu récupéré doit être accessible à partir de JavaScript pour une manipulation et une présentation supplémentaires au sein de l'extension, très probablement sous forme de chaîne.
Existe-t-il des points d'ancrage dans les API spécifiques à WebKit/Chrome qui peuvent être utilisés pour effectuer une demande Web normale et obtenir les résultats pour une manipulation?
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 point qui arrête une solution, alors ignorez les points bonus.
Essayez d'utiliser XHR2responseType = "document"
et se replier sur (new DOMParser).parseFromString(responseText, getResponseHeader("Content-Type"))
avec 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 une URL d'objet créée à partir d'un text/html
blob).
Utilisez l'API Chrome WebRequest pour masquer X-Requested-With
, etc. en-têtes.
Si vous regardez bien quelque chose au-delà d'un Google Chrome Plugin, regardez phantomjs qui utilise Qt-Webkit en arrière-plan et fonctionne comme un navigateur comprenant des requêtes ajax. Vous pouvez l'appeler un navigateur sans tête, car il n'affiche pas la sortie sur un écran et peut fonctionner en arrière-plan pendant que vous faites d'autres choses. Si vous le souhaitez, vous pouvez exporter des images, des PDF hors des pages qu'il récupère. fournit une interface JS pour charger les pages, en cliquant sur les boutons, etc., tout comme vous l'avez dans un navigateur. Vous pouvez également injecter du JS personnalisé, par exemple jQuery, sur l'une des pages que vous souhaitez gratter et l'utiliser pour accéder au dom et exporter les données souhaitées. Comme son utilisation Webkit son comportement de rendu est exactement comme Google Chrome.
Une autre option serait d'utiliser Aptana Jaxer qui est basé sur Mozilla Engine et est un très bon concept en soi. Il peut également être utilisé comme un simple outil de grattage.
De nombreux outils ont été publiés depuis que cette question a été posée.
artoo.js est l'un d'entre eux. C'est un morceau de code JavaScript destiné à être exécuté dans la console de votre navigateur pour vous fournir quelques utilitaires de grattage. Il peut également être utilisé comme une extension chrome.
Le scraping Web est un peu compliqué dans une extension Chrome. Quelques points:
Je ne suis pas sûr que ce soit tout à fait possible avec seulement JavaScript, mais si vous pouvez configurer un script PHP pour votre extension qui utilise cURL pour récupérer le code HTML d'une page, le PHP pourrait gratter la page pour vous et votre extension pourrait la lire via une requête AJAX.
La page réelle en cours de scrap ne sait pas qu'il s'agit d'une demande AJAX, cependant, car elle est accessible via cURL.
Je pense que vous pouvez partir de cela exemple .
Donc, fondamentalement, vous pouvez 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 des requêtes HTTP réelles.
Je peux recommander d'utiliser Firebreath comme une plate-forme de plug-in multiplateforme Chrome/Firefox, en particulier jetez un œil à cet exemple: Firebreath - Création + HTTP + Requêtes + avec + SimpleStreamsHelper
ne pourriez-vous pas simplement faire une supercherie iframe? si vous chargez l'url dans un cadre dédié, vous avez le dom dans un objet document et pouvez faire vos sélections jquery, non?