2017-09-19 5 views
3

Je suis en train de gratter les données de ce website, en utilisant httr et rvest. Après plusieurs fois de grattage (environ 90 - 100), le site me transfèrera automatiquement vers une autre URL avec captcha.comment traiter captcha lorsque le grattage web en utilisant R

c'est l'URL normale: "https://fs.lianjia.com/ershoufang/pg1"

c'est l'URL captcha: "http://captcha.lianjia.com/?redirect=http%3A%2F%2Ffs.lianjia.com%2Fershoufang%2Fpg1"

Quand mon araignée vient url accross captcha, il me dira d'arrêter et de le résoudre dans le navigateur. Ensuite, je le résous à la main dans le navigateur. Mais quand je lance l'araignée et envoie la demande GET, l'araignée est toujours transférée à captcha url. Pendant ce temps dans le navigateur, tout va normalement, même si je tape dans l'URL du captcha, il va me renvoyer à l'URL normale dans le navigateur.

Même j'utiliser proxy, j'ai toujours le même problème. Dans le navigateur, je peux normalement naviguer sur le site, tandis que l'araignée continue d'être transféré à captcha url.

Je me demandais,

  1. est ma façon d'utiliser correctement proxy?
  2. Pourquoi l'araignée continue d'être transférée alors que le navigateur ne le fait pas. Ils proviennent de la même adresse IP.

Merci.

Ceci est mon code:

a <- GET(url, use_proxy(proxy, port), timeout(10), 
      add_headers('User-Agent' = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36', 
         'Connection' = 'keep-alive', 
         'Accept-Language' = 'en-GB,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,en-US;q=0.2,fr;q=0.2,zh-TW;q=0.2', 
         'Accept-Encoding' = 'gzip, deflate, br', 
         'Host' = 'ajax.api.lianjia.com', 
         'Accept' = '*/*', 
         'Accept-Charset' = 'GBK,utf-8;q=0.7,*;q=0.3', 
         'Cache-Control' = 'max-age=0')) 
b <- a %>% read_html %>% html_nodes('div.leftContent') %>% html_nodes('div.info.clear') %>% 
      html_nodes('div.title') %>% html_text() 

Enfin, je tourné vers RSelenium, il est lent, mais pas plus captchas. Même quand il apparaît, je peux directement le résoudre dans le navigateur.

+0

C'est une fonction intentionnelle du site Web qui veut contrôler la manière dont vous utilisez ses données. Une fois que vous avez effacé le captcha sur votre navigateur, il a un cookie qu'il contient.Votre script R n'a pas cette "clé" à afficher quand il revient, donc il récupère le captcha. Et il est logique que le site fonctionne de cette façon parce que les scripts malveillants sur votre ordinateur pourraient essayer d'utiliser votre adresse IP pour gratter (ou même voler) des données et les envoyer ailleurs ... c'est la défense des sites contre ce type de comportement. Vous devriez étudier les termes du site pour être sûr de ne pas les violer en grattant. – sconfluentus

Répondre

0

Vous obtenez CAPTCHAs parce que c'est le site Web de façon tente d'empêcher script/programmation non humain leurs données mise au rebut. Ainsi, lorsque vous essayez de récupérer les données, il vous détecte comme un script non humain/robotique. La raison pour laquelle cela se produit parce que votre script envoie une requête GET très fréquente avec quelques données de paramètres. Votre programme doit se comporter comme un utilisateur réel (site Web visitant dans le modèle de temps aléatoire, différents navigateurs, et IP).

Vous pouvez éviter d'être CAPTCHA en manipulant avec ces paramètres comme ci-dessous. Ainsi, votre programme apparaîtra comme un utilisateur réel:

  1. Utilisez le caractère aléatoire lors de l'envoi d'une requête GET. Comme vous pouvez utiliser la fonction Sys.sleep (utiliser la distribution aléatoire) pour dormir avant d'envoyer chaque requête GET.

  2. manipuler les données de l'agent utilisateur (Mozilla, Chrome, IE, etc.), l'acceptation de biscuit, et le codage.

  3. votre emplacement Manipulez source (adresse IP, et informations sur le serveur)

ces informations Manipuler vous aidera à éviter d'obtenir la validation de CAPTACHA d'une certaine façon.