2016-04-08 114 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