2016-08-23 116 views
2

我試圖抓取使用美麗湯的webpage,但我遇到了一個標籤的問題,該標籤從瀏覽器中顯示的內容以及我在終端中收到的內容發生了神奇的變化。 This tab在用Beautifulsoup解析HTML時更改標籤

Correspond to this tag

確定這樣的標籤上面對應的HTML標籤上面我的瀏覽器。 有一次,我與美麗的解析它,我做的事:

from bs4 import BeautifulSoup 
import requests  
url = "http://www.allocine.fr/film/fichefilm_gen_cfilm=144185.html" 
page = requests.get(url) 
soup = BeautifulSoup(page.content, 'html.parser') 
trailer = soup.find(title="Bandes-annonces") 
print trailer 

哪個輸出:

<span class="ACrL3ZACrpZGVvL3BsYXllcl9nZW5fY21lZGlhPTE5NTYxOTgyJmNmaWxtPTE0NDE4NS5odG1s item trailer icon icon-play-mini" title="Bandes-annonces"> 
     Bandes-annonces 
    </span> 

我想知道爲什麼我的「」標籤突然變成了「跨越」的標籤?我怎樣才能避免它?

+2

看看頁面的來源。它可能會改變與JavaScript。如果是的話,試着用selenium來抓取頁面 –

+1

也許,首先找到的包含'title = bandes-announces'的標籤是span標籤 – iparjono

回答

2

有幾個問題,使用的Javascript創造了一些代碼,則實際上是有一個標題=「Bandes-annonces」,你在你的輸出中看到兩個標籤是第一次出現與混淆數據是基-64具有嵌入式子(一個或多個)編碼的,則可以在具有AC.config = { JS的功能之一看到下列情況:

seo: { 
     obfuscatedPrefix: 'ACr' 
    }, 

在源從請求取回每個標籤包含編碼數據如ACrL3ZACrpZGVvL3BsYXllcl9nZW5fY2 1lZGlhPTE5NTYxOTgyJmNmaWxtPTE0NDE4NS5odG1s

你可以看到,如果我們更換前綴ACR基64解碼剩餘字符串的任何出現:

In [113]: s = "ACrL3ZACrpZGVvL3BsYXllcl9nZW5fY21lZGlhPTE5NTYxOTgyJmNmaWxtPTE0NDE4NS5odG1s" 

In [114]: s.replace("ACr", "").decode("base-64") 
Out[114]: '/video/player_gen_cmedia=19561982&cfilm=144185.html' 

我們拿到的HREF。

如果你想獲得與標題標籤,你可以使用CSS類之一:

trailer = soup.find(class_="icon-play-mini", title="Bandes-annonces") 

它,如果我們運行代碼:

In [117]: url = "http://www.allocine.fr/film/fichefilm_gen_cfilm=144185.html" 

In [118]: page = requests.get(url) 

In [119]: soup = BeautifulSoup(page.content, 'html.parser') 

In [120]: trailer = soup.find(class_="icon-play-mini", title="Bandes-annonces") 

In [121]: print trailer 
<span class="ACrL3ZACrpZGVvL3BsYXllcl9nZW5fY21lZGlhPTE5NTYxOTgyJmNmaWxtPTE0NDE4NS5odG1s item trailer icon icon-play-mini" title="Bandes-annonces"> 
      Bandes-annonces 
     </span> 

給你的第二次出現標題=

然後獲取href:

In [122]: trailer["class"][0].replace("ACr", "").decode("base-64") 
Out[122]: '/video/player_gen_cmedia=19561982&cfilm=144185.html' 

你可以看到它不會非常直接地從該網站上抓取數據,混淆可能是出於很好的理由,使得拼湊更難,因爲他們很可能不想讓你做它。

+0

其實我只是想看看標籤「bande-annonce」是否被禁用或者不。像「vod」 – mel

+0

什麼表示它被禁用。 –

+0

如果有鏈接,您可以點擊它或不是 – mel