web-dev-qa-db-fra.com

Étiquette de raclage Web

J'envisage de rédiger une simple application de nettoyage Web pour extraire des informations d'un site Web qui ne semble pas l'interdire spécifiquement. 

J'ai recherché d'autres alternatives (RSS, service Web, par exemple) pour obtenir ces informations, mais il n'y en a aucune disponible à ce stade.

En dépit de cela, j'ai également développé/entretenu moi-même quelques sites Web et je réalise donc que si le raclage Web est effectué naïvement/goulûment, il peut ralentir le fonctionnement des autres utilisateurs et devenir généralement une nuisance.

Alors, quelle étiquette est impliqué 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 de cache HTTP.
  5. Taille de la mémoire tampon pour les fichiers/ressources plus volumineux.
  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 raclage Web ou simplement pour les robots d'exploration/spiders?
  9. Compression telle que GZip dans les requêtes.

Mettre à jour

Trouvé cette question pertinente sur Meta: Etiquette de Screen Scaping StackOverflow . La réponse de Jeff Atwood contient des recommandations utiles.

Autres questions liées à StackOverflow:

Options pour html scraping

102
Ash

Si vous vous conformez à la demande robot.txt du site, il s'agit probablement de l'un des moyens les plus éthiques et les meilleurs de parvenir à un accord sans contacter personne sur le site.

Identifiez-vous de manière appropriée dans l'en-tête de UserAgent. En faisant cela, le site peut voir qui vous êtes et restreindre/autoriser certaines zones de leur site de manière explicite. Par exemple, regardez les agents utilisateurs du grand gars, Google est répertorié ci-dessous, et concevez-en un similaire avec une page décrivant qui vous êtes et comment informer vos robots d'exploration.

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

Utilisez la compression gzip/deflate si le site le permet, ce qui vous fait gagner du temps et de la bande passante.

Vous devriez être d'accord d'un point de vue juridique (même si je ne suis ni avocat ni avocat) si vous suivez leur fichier robots.txt ET leurs conditions d'utilisation. 

À la fin, cependant, je pense que le meilleur conseil était de runrunraygun, étant donné qu’il s’agissait d’un site isolé. Contacter l'administrateur et voir ce qui serait acceptable et respecter ses souhaits vous mènera loin.

28
Pat

robots.txt est pertinent: regardez-le pour avoir une idée de l'attitude du site vis-à-vis des lecteurs non-humains. Montrer une certaine connaissance de son contenu rassurera l'administrateur Web lorsque vous leur enverrez un courrier électronique que vous veillerez à respecter le site lorsque vous grattez.

17
Charles Stewart

Je suggérerais d'envoyer un courrier électronique au webmaster, de lui dire que vous écrivez un script non malveillant, etc., et de lui demander ce qu'il est content de frapper et à quelle fréquence.

nous exécutons un robot de domaine qui récupère les documents pdf/Word, etc. de domaines amis et le maximum que nous avons demandé est un écart de 5 secondes entre les demandes et une exécution nocturne.

9
gingerbreadboy

Cela dépend vraiment de ce que vous grattez et de la quantité que vous grattez. Par exemple, j'ai dû écrire un grattoir il y a environ une semaine pour parcourir plusieurs centaines de pages. Pour être généreux, j'ai mis 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 jeu que je pourrais laisser dans le processus.

2
Sampson

Pour les personnes intéressées par le scraping Web, je vous recommande fortement de lire ce livre (il traite également de l'étiquette, donc je me suis senti pertinent pour l'article): 

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 constamment des demandes, vous pouvez potentiellement avoir votre IP en liste noire. Si tel est le cas, vous pouvez utiliser un proxy rotatif tel que proxy proxy . Le site ne sera pas vraiment en mesure de distinguer si vous grattez/rampez, c’est pourquoi robots.txt est toujours une bonne idée à respecter.

En ce qui concerne la légalité, d'après ce que j'ai lu, c'est un peu une zone grise. En règle générale, si vous jouez en tant qu'invité (et non en tant qu'utilisateur connecté), vous ne serez pas tenu de respecter les termes et conditions qui pourraient avoir des conséquences sur les requêtes automatisées. 

Tant que vous avez un délai important entre vos demandes, suivez le fichier robots.txt et prenez des mesures pour éviter que votre adresse IP ne soit inscrite sur une liste noire, votre scraper devrait survivre.

0
DannyMoshe

Un ajout que j'ai trouvé peut faire une grande différence dans le nombre de demandes: regardez la structure du site. Si le site est dynamique, il existe probablement plusieurs emplacements où les données souhaitées peuvent être trouvées. Parfois sur une page. Sur WP, les pages de catégorie et d’archives contiennent souvent (jusqu’à) la totalité du contenu des articles dans un seul et même endroit. Peut-être que ce sont des cas Edge, mais je finis par en extraire des données assez régulièrement et j'ai constaté qu’un pourcentage important du temps est une solution de rechange. 

TLDR; Il suffit parfois de fouiller un peu pour sauver des centaines de demandes. 

De plus, des webmasters m'ont simplement envoyé les informations que je cherchais à effacer. En supposant que vous ayez contacté et que vous travaillez à peu près aux mêmes objectifs (en tant que non-concurrents).

0
Merrill Cook

J'ajouterais que même si Python dispose d'un verrou d'interprète global, par exemple. GIL Si vous demandez des données et que la rapidité est essentielle, utiliser le module import multithreading peut être très utile, car la demande prend du temps à se terminer ... somme des demandes), vous pourriez être banni et votre connexion pourrait être bloquée. Il n’est pas possible de déterminer le seuil à moins de faire des tests. 

0
Elvir Muslic