使用Beautifulsoup解析时更改HTML中的标记

2024-10-01 09:31:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图用漂亮的soup抓取一个webpage,但我遇到了一个标签问题,它神秘地改变了浏览器中显示的内容和终端中接收到的内容。 This tab

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>

我想知道为什么我的“a”标签突然变成了“span”标签?我怎样才能避免呢?你知道吗


Tags: importurl内容titlehtmlpage浏览器标签
1条回答
网友
1楼 · 发布于 2024-10-01 09:31:14

有一些问题,一些标记是使用Javascript创建的,实际上有两个标记有一个title=“Bandes annonces”,您在输出中看到的是第一次出现的模糊数据,它是用嵌入子字符串编码的base-64,您可以在一个具有AC.config = {的Js函数中看到以下内容:

 seo: {
        obfuscatedPrefix: 'ACr'
    },

从请求返回的源中的每个标记都包含编码数据,如acrl3zacrpzgvvl3bsyxllc9nzw5fy21lzglhpte5ntyxotgyjmnawxtpte0nde4ns5odg1s

您可以看到我们是否替换前缀ACrbase-64的任何出现,并解码剩余的字符串:

In [113]: s = "ACrL3ZACrpZGVvL3BsYXllcl9nZW5fY21lZGlhPTE5NTYxOTgyJmNmaWxtPTE0NDE4NS5odG1s"

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

我们得到了答案。你知道吗

如果您想获得带有标题的标记,可以使用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'

你可以看到,从那个网站上抓取数据并不是一件很直接的事情,混淆很可能是有原因的,因为他们很可能不想让你这么做,所以使得抓取变得更困难。你知道吗

相关问题 更多 >