2016-04-08 158 views
0

我正在抓取像這樣的一個網頁http://www.allocine.fr/film/fichefilm-215143/similaire/履帶和「隱藏」鏈接

我想檢索它是鏈接的每部電影。所以,我做了一個功能,將這樣做:

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] 

它做工精細爲所有的電影,因爲他們都建立同樣的方式:

<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> 

但最後一個是有點不同當我檢查我的瀏覽器中的元素,而不是標題爲:class="meta-title-link",我有class="xXx meta-title-link"

當我爬它還是看看源代碼的鏈接消失,是取代: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> 

您知道如何獲取鏈接以及爲何發生這種情況?

回答

1

它是Base64格式:

data-ac="==L2ZpbG0vZmljaGVmaWxtX2dlbl9jZmlsbT0yMjY2NDQuaHRtbA==" 

帶前兩個字符==然後

import base64 

base64.b64decode("L2ZpbG0vZmljaGVmaWxtX2dlbl9jZmlsbT0yMjY2NDQuaHRtbA==") 

它會對其進行解碼,以/film/fichefilm_gen_cfilm=226644.html

+0

爲什麼使用這樣的事情吧? – mel

+0

這是他們的應用程序設計,而我在這裏觀察到的是自定義屬性** data-ac **在那裏的任何地方,其中包含錨信息和頁面加載JavaScript解析這些數據並準備onfly標籤。你可以通過瀏覽器查看。 - 可能是混淆爬行者的原因。 – kakurala