2017-03-20 3 views
1

J'essaye d'analyser avec BeautifulSoup la page de film de rarbg.to. J'essaie de collecter les titres des films.L'analyse de page de torrent échoue

donc mon code en Python est le suivant:

import urllib2 
from bs4 import BeautifulSoup 
url = "https://rarbg.to/torrents.php?category=movies" 

hdr = { 
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 
    'Accept-Encoding': 'none', 
    'Accept-Language': 'en-US,en;q=0.8', 
    'Connection': 'keep-alive', 
} 
req = urllib2.Request(url, headers=hdr) 

try: 
    page = urllib2.urlopen(req) 
except urllib2.HTTPError, e: 
    print e.fp.read() 

# Get all the HTML page 
raw_content = page.read() 
# print raw_content #debug 

# Pass the html page to BeautifulSoup 
soup = BeautifulSoup(raw_content) 
print soup #debug 

movie_titles = soup.find_all("tr","lista2") 
print movie_titles 

Quand je le lance, il imprime correctement une liste d'éléments de film (les lignes de la table).

Mais quand j'ai essayé plusieurs fois après, il retourne ceci:

<html><head> 
</head> 
<body> 
<style type="text/css">a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,p,pre,q,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;outline:0;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0} 
body { 
    background: #000 url("//dyncdn.me/static/20/img/bknd_body.jpg") repeat-x scroll 0 0 !important; 
    font: 400 8pt normal Tahoma,Verdana,Arial,Arial !important; 
} 
.button { 
    background-color: #3860bb; 
    border: none; 
    color: white; 
    padding: 15px 32px; 
    text-align: center; 
    text-decoration: none; 
    display: inline-block; 
    font-size: 16px; 
    cursor: pointer; 
    text-transform: none; 
    overflow: visible; 
} 
.content-rounded { 
    background: #fff none repeat scroll 0 0 !important; 
    border-radius: 3px; 
    color: #000 !important; 
    padding: 20px; 
    width:961px; 
} 
</style><div align="center" style="margin-top:20px;padding-top:20px;color: #000 !important;"> 
<div class="content-rounded" style="color: #000 !important;"> 
<img src="//dyncdn.me/static/20/img/logo_dark_nodomain2_optimized.png"/><br/>Please wait while we try to verify your browser...<br/>If you are stuck on this page disable your browser addons<br/><img src="//dyncdn.me/static/20/img/loading_flat.gif"/> 
</div> 
</div> 
<script> 
var w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
var h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; 
var days = 7; 
var date = new Date(); 
var name = 'sk'; 
var value_sk = 'iqcdg1oe63'; 
date.setTime(date.getTime()+(days*24*60*60*1000)); 
var expires = ";expires="+date.toGMTString(); 
document.cookie = name+"="+value_sk+expires+"; path=/"; 

if(w < 100 || h < 100) { 
    window.location.href = "/threat_defence.php?defence=nojc&r=54677187"; 
} else { 
    if(!document.domain) { var ref_cookie = ''; } else { var ref_cookie = document.domain; } 
    setTimeout(function(){ 
     window.location.href = "/threat_defence.php?defence=2&sk="+value_sk+"&ref_cookie="+ref_cookie+"&r=74070547"; 
    }, 3000); 
} 
</script> 
</body></html> 
[] 

Process finished with exit code 0 

Comme je comprends ce Please wait while we try to verify your browser...<br/>If you are stuck on this page disable your browser addons a à voir avec le problème.

Est-ce une sorte de précaution pour les attaques DDOS, ou captcha? Je fais seulement une ou deux demandes par minute, pendant le développement.

+0

Lire les TOS ... * Vous n'êtes pas autorisé à, et vous garantissez et acceptez que vous ne ferez pas ou ne faciliterez pas l'une des opérations suivantes ... (7) ** utiliser un robot, une araignée, une chenille, d'autres dispositif automatique, ou processus manuel pour copier nos pages Web, torrents, ou tout autre contenu contenu sans notre autorisation écrite expresse préalable ***. https://rarbg.to/useragreement.php –

Répondre

1

Ce n'est pas que vous seriez protection DDOSbloqué \ filtré. Le problème ici est qu'ils utilisent d'autres types de confirmation pour votre navigateur pour déterminer si vous êtes humain (comme captcha). Comme vous pouvez le voir ici, il vous donne une redirection vers une autre page (le navigateur humain suivra automatiquement contrairement à votre script.)

Maintenant, vous êtes probablement à la recherche de solutions possibles à ce problème. Voici quelques-unes:

  1. Mettre en œuvre une attente temps avant que chaque demande (vous pouvez utiliser le temps d'importation, time.sleep (secondes))
  2. En utilisant Sélénium - « Sélénium automatise les navigateurs. C'est tout! Ce que tu fais de ce pouvoir dépend entièrement de toi. - Ma recommandation.
  3. Proxy ou d'autres solutions de brouillage d'identité.

Selenium - C'est un faux navigateur - 2017 - ME. Il a des méthodes comme attendre EC.presence_of_element_located((By.ID, "myDynamicElement"))http://selenium-python.readthedocs.io/waits.html Par conséquent, vous pouvez le programmer pour imiter le comportement humain.

+1

Merci. J'ai utilisé beaucoup de sélénium mais je ne voulais pas l'utiliser. Je suis en train de mettre sur pied un projet d'animal de compagnie POC. Rien de grave ou de nuisible. Je me pencherai sur la solution proxy, même si je pense que c'est excessif parce que je vais juste exécuter le script une ou deux fois par jour ou deux. –

+0

Ouais je connais ce sentiment, je déteste l'utiliser aussi, pas parce que c'est mauvais mais ça ne ressemble pas à un script. Tu ne fais pas de bot, tu fais un humain. –

1

J'ai dû faire beaucoup de demandes au site pour reproduire ceci. On dirait que mon ip est maintenant bloqué. Envisagez d'utiliser quelque chose comme TOR, ou un vpn pour changer votre adresse IP après quelques essais.