2016-08-16 1 views
0

J'essaye de gratter Reddit avec Nokogiri, mais un seul passage continue à me dire que je fais trop de demandes.Scraping Reddit en utilisant Nokogiri (429 requêtes en trop)

require 'nokogiri' 
require 'open-uri' 
url = "https://www.reddit.com/r/all" 
redditscrape = Nokogiri::HTML(open(url)) 

OpenURI::HTTPError: 429 Too Many Requests 

N'est-ce pas une seule demande? Si ce n'est pas le cas, comment puis-je créer des intervalles de sommeil pour Nokogiri?

+1

Vous confondez le but de Nokogiri dans votre code avec celui de openURI. OpenURI fait la connexion puis la passe à Nokogiri pour la lire, donc votre question ne concerne pas Nokogiri et ne devrait pas être étiquetée comme telle. C'est une question OpenURI, et devrait être éditée pour refléter cela. –

Répondre

4

Reddit a un API

Vous pouvez probablement interroger l'API pour la sous-reddit particulier (s) que vous voulez gratter. Essayer de gratter tout Reddit semble juste comme un cauchemar qui attend de se produire compte tenu du volume élevé et des commentaires imbriqués.

Il semble que Reddit bloque la possibilité de racler en faveur de l'utilisation de leur public API.

+0

Ne devrait pas racler juste tirer toutes les données html de la page en question? C'est seulement la page d'accueil. Les commentaires ne sont que des liens. – Andrew

+0

Etes-vous en train d'essayer d'obtenir les sujets 'hot'? Ou voulez-vous littéralement vouloir seulement le nom de chaque sous-reddit? Sans savoir ce que vous essayez d'accomplir, il est difficile de donner la meilleure réponse. Pour répondre à votre première question, oui en théorie nokogiri devrait renvoyer le code HTML pour cette page. – sump

+2

Reddit bloque probablement l'user-agent utilisé par open-uri. Il revient simplement 429 comme une façon de dire que nous attendons 0. – Vangel