2016-04-08 15 views
0

Ich krabbele eine Web-Seite wie diese http://www.allocine.fr/film/fichefilm-215143/similaire/.Crawler und "versteckter" Link

Ich möchte für jedes Filme abrufen, es ist Link. Also habe ich eine Funktion, die so etwas wie tun:

soup = BeautifulSoup(get_HTML_sim_movies(allocine_id), "html.parser") 
    allocine_ids_sim = [] 

    sim_movie_links = soup.find_all("h2") 
    for sim_movie_html in sim_movie_links: 
     fiche_film = sim_movie_html.find('a').get('href').split("/")[2] 

Es ist für alle Filme gut funktionieren, da sie alle die gleiche Art und Weise bauen:

<h2 class="meta-title"> 
    <strong> 
     <a class="meta-title-link" href="/film/fichefilm_gen_cfilm=193113.html">Captain America, le soldat de l&#039;hiver</a> 
    </strong> 
</h2> 

Aber die letzte ist ein bisschen anders wenn ich das Element Titel mit meinem Browser anstelle von inspizieren: class="meta-title-link" habe ich class="xXx meta-title-link"

und wenn ich es kriechen oder den Quellcode Blick auf den Link verschwinden und ist ersetzen durch: data-ac="==L2ZpbG0vZmljaGVmaWxtX2dlbl9jZmlsbT0yMjY2NDQuaHRtbA=="

<h2 class="meta-title"> 
    <strong> 
     <span class="meta-title-link" data-ac="==L2ZpbG0vZmljaGVmaWxtX2dlbl9jZmlsbT0yMjY2NDQuaHRtbA==">Avengers Confidential : La Veuve Noire et Le Punisher</span> 
    </strong> 
</h2> 

Wissen Sie, wie Sie den Link bekommen und warum dies passiert?

Antwort

1

Es ist im Base64-Format:

data-ac="==L2ZpbG0vZmljaGVmaWxtX2dlbl9jZmlsbT0yMjY2NDQuaHRtbA==" 

Streifen ersten beiden Zeichen == dann

import base64 

base64.b64decode("L2ZpbG0vZmljaGVmaWxtX2dlbl9jZmlsbT0yMjY2NDQuaHRtbA==") 

es zu /film/fichefilm_gen_cfilm=226644.html dekodieren

+0

Und warum sind sie diese Art von Dingen? – mel

+0

Es ist ihre Anwendung Design, Und was ich hier beobachtet, ist, wo das benutzerdefinierte Attribut ** Daten-ac ** ist, die Anker-Informationen darin hält und auf Seite laden Javascript Parsen dieser Daten und die Vorbereitung Tags onfly. Sie können dies durch die Überprüfung im Browser sehen. - Könnte der Grund sein, Crawler zu verwirren. – kakurala