Étiquette de grattage Web

J’envisage d’écrire une simple application de grattage Web pour extraire des informations d’un site Web qui ne semble pas l’interdire spécifiquement.

J’ai cherché d’autres solutions (par exemple, RSS, service Web) pour obtenir cette information, mais il n’y en a pas pour le moment.

Malgré cela, j’ai également développé / maintenu quelques sites Web moi-même et je me rends compte que si le web scraping est fait naïvement / avidement, cela peut ralentir les choses pour les autres utilisateurs et devenir généralement une nuisance.

Donc, quelle étiquette est impliquée en termes de:

  1. Nombre de demandes par seconde / minute / heure.
  2. Contenu de l’agent utilisateur HTTP.
  3. Contenu du référent HTTP.
  4. Paramètres du cache HTTP.
  5. Taille de la mémoire tampon pour les fichiers / ressources plus importants.
  6. Légalités et problèmes de licence.
  7. Bons outils ou approches de conception à utiliser.
  8. Robots.txt, est-ce pertinent pour le web scraping ou juste les robots / spiders?
  9. Compression telle que GZip dans les requêtes.

Mettre à jour

J’ai trouvé cette question pertinente sur Meta: Etiquette de StackOverflow . La réponse de Jeff Atwood contient des recommandations utiles.

Autres questions liées à StackOverflow:

Options pour le grattage HTML

Conformez-vous à la demande de robot.txt du site, c’est probablement l’une des meilleures façons d’éthique de parvenir à un accord sans parler à personne sur le site.

Ne vous identifiez pas correctement dans l’en-tête UserAgent. En faisant cela, le site peut voir qui vous êtes et restreindre / autoriser certaines zones de leur site à vous explicitement. Par exemple, regardez les agents utilisateurs du gros gars, Google est listé ci-dessous, et imaginez-en un similaire qui a une page décrivant qui vous êtes et comment informer vos robots.

Chaîne de l’agent utilisateur de Google: Googlebot / 1.0 ([email protected] http://googlebot.com/ )

Utilisez la compression gzip / deflate si le site prend en charge, cela vous permet d’économiser du temps et de la bande passante du site.

Vous devriez être d’accord d’un sharepoint vue légal (bien que je ne sois ni avocat ni expert juridique) si vous suivez leur robots.txt ET leurs conditions de service.

En fin de compte, cependant, je pense que le meilleur conseil était de runrunraygun, étant donné que c’est un site isolé. Contacter l’administrateur et voir ce qui serait acceptable et respecter ses souhaits vous mènera loin.

robots.txt est pertinent: regardez-le pour avoir une idée de l’attitude du site envers les lecteurs non humains. En montrant une certaine connaissance de son contenu, vous rassurez l’administrateur de Web lorsque vous lui envoyez un courriel que vous prendrez soin de respecter le site lorsque vous le consulterez.

Je suggère que vous envoyiez un e-mail au webmaster, lui disiez que vous écrivez un script non-malveillant, etc.

Nous exploitons un robot d’exploration de domaine qui récupère les documents pdf / word, etc. dans des domaines conviviaux. Le plus que nous ayons demandé est un intervalle de 5 secondes entre les requêtes et ne s’exécute que la nuit.

Cela dépend vraiment de ce que vous grattez et de la quantité que vous grattez. Par exemple, j’ai dû écrire un racleur il y a environ une semaine pour parcourir plusieurs centaines de pages. Pour être généreux, j’ai placé une seconde d’attente après chaque page. Il a fallu quelques minutes pour récupérer les données, mais je suis sûr que le propriétaire du site apprécierait tout ce que je peux laisser dans le processus.

J’appendais aussi que même si Python a un Global Interpreter Lock, par exemple GIL Si vous demandez des données et que la vitesse est essentielle, le module d’ import multithreading peut être très utile, car la demande prend du temps. En même temps, si vous demandez beaucoup de données (en faisant une grande quantité de requêtes), vous pourriez être banni et votre connexion pourrait être bloquée. Il n’y a pas moyen de déterminer le seuil, sauf si vous faites des tests.

Pour toute personne intéressée par le web scraping, je vous recommande fortement de lire ce livre (il aborde également l’étiquette, donc j’ai senti que c’était pertinent pour le post):

https://github.com/1040003585/WebScrapingWithPython/blob/master/Packt-Web.Scraping.with.Python.Richard%20Lawson.pdf

D’après mon expérience dans le raclage, si vous faites régulièrement des demandes, vous pourriez potentiellement avoir votre liste noire sur IP. Si tel est le cas, vous pouvez examiner un proxy tournant comme les proxies de tempête . Le site ne sera pas vraiment en mesure de distinguer si vous effectuez un balayage ou une exploration, il est donc recommandé de conserver robots.txt.

En ce qui concerne la légalité, de ce que j’ai lu c’est un peu une zone grise. En règle générale, en tant qu’invité (et non en tant qu’utilisateur connecté), vous ne serez pas tenu responsable des termes et conditions susceptibles d’être verbalisés contre des demandes automatisées.

Tant que vous avez un délai important entre vos requêtes, suivez le fichier robots.txt et prenez des mesures pour éviter que votre ip ne soit mise sur liste noire.

Un ajout que j’ai trouvé peut faire une grande différence dans le nombre de demandes: regardez la structure du site. Si la dynamic du site existe, il existe probablement un certain nombre d’emplacements où les données souhaitées peuvent être trouvées. Parfois sur une page. Sur les catégories WP et les pages d’archives, il y a souvent (jusqu’à) la totalité du contenu des articles dans un seul endroit. Peut-être que ce sont des cas extrêmes, mais je finis par gratter des données un peu régulièrement et j’ai constaté qu’un pourcentage notable du temps était consacré au travail.

TLDR; fouiller un peu peut parfois sauver des centaines de demandes.

De plus, j’ai eu des webmasters juste pour m’envoyer les informations que je cherche à gratter. En supposant que vous avez contacté et que vous travaillez à peu près aux mêmes objectives (que les non-concurrents).

  1. ~ 5 secondes de délai par domaine. Vous pouvez ajuster votre délai en fonction de la rapidité avec laquelle le site Web renvoie le contenu.
  2. utilisateur-agent défini sur navigateur commun pour que le site Web affiche normalement
  3. référent défini à l’endroit où la page était liée
  4. combien de temps je mets en cache dépend du site Web. Typiquement 1 mois.
  5. Je télécharge uniquement des fichiers texte et image
  6. “Plus facile de demander pardon que d’obtenir une permission”
  7. J’utilise des librairies Python existantes telles que lxml et d’ autres que j’ai développées
  8. le web scraping implique des robots / spiders, donc oui robots.txt est pertinent
  9. toujours compresser

Je fais beaucoup de grattage sur le Web et j’ai constaté que la plupart des sites Web ne suivent pas du tout les comportements suspects.

Si vous êtes concerné, au lieu de télécharger du contenu directement depuis votre site Web cible, vous pouvez utiliser Google Cache, Archive.org, etc. Ou utiliser des serveurs proxy.

Il est toujours préférable d’utiliser un service de grattage Web si vous achetez des données pour votre entreprise. Le raclage Web étant un processus à forte intensité technologique, le faire en interne pourrait facilement épuiser vos ressources et ralentir la croissance de l’entreprise.