代码之家  ›  专栏  ›  技术社区  ›  Fang

美汤刮网归无型

  •  3
  • Fang  · 技术社区  · 6 年前

    我正在尝试用漂亮的汤刮一个网站,并写了以下代码:

    import requests
    from bs4 import BeautifulSoup
    
    page = requests.get("https://gematsu.com/tag/media-create-sales")
    soup = BeautifulSoup(page.text, 'html.parser')
    
    try:
        content = soup.find('div', id='main')
        print (content)
    except:
        print ("Exception")
    

    但是,这会返回一个nonetype,即使该DIV在网站上具有正确的ID。我做错什么了吗?

    我在页面上看到了ID为MAIN的DIV:

    enter image description here

    当我打印的时候,我也会找到DIV MAIN。 soup :

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  3
  •   Wondercricket    6 年前

    其中简要介绍了 BeautifulSoup's documentation

    漂亮的soup为许多不同的解析器提供了相同的接口,但是每个解析器都是不同的。不同的解析器将从同一文档创建不同的解析树。最大的区别在于HTML解析器和XML解析器之间

    …]

    这里是用python内置的html解析器解析的同一文档:

    BeautifulSoup("<a></p>", "html.parser")

    与html5lib一样,此分析器忽略结束 </p> 标签。与html5lib不同,此解析器不尝试通过添加标记来创建格式良好的HTML文档。与LXML不同,它甚至不需要添加标记。

    您遇到的问题可能是由于 html.parser 无法正确处理。这导致了 id="main" 当BeautifulSoup解析HTML时被剥离。通过将解析器更改为 html5lib lxml ,BeautifulSoup处理格式错误的HTML与 语法分析器