【问题标题】:How to parse Web pages that don't return results initially in Python?如何解析最初在 Python 中不返回结果的网页?
【发布时间】:2016-02-08 11:38:09
【问题描述】:

我想在 Python 中加载 this page 中的图像列表。但是,当我在浏览器(Chrome 或 Safari)中打开页面并打开开发工具时,检查器返回的图像列表为 <img class="grid-item--image">...

但是,当我尝试在 Python 中解析它时,结果似乎有所不同。具体来说,我得到的图像列表为<img class="carousel--image"...>,而soup.findAll("img", "grid-item--image") 确实返回了一个空列表。另外,我尝试使用其srcset 标签保存这些图像,大多数保存的图像不是网络上列出的。

我认为网页在渲染时使用了某种技术。如何成功解析网页?

我在 Python 3.5 上使用了 BeautifulSoup 4。我加载页面如下:

import requests
from bs4 import BeautifulSoup
html = requests.get(url).text
soup = BeautifulSoup(html, "html.parser", from_encoding="utf-8")

return soup

【问题讨论】:

    标签: python parsing request beautifulsoup


    【解决方案1】:

    您最好使用selenium 之类的东西,如下所示:

    from bs4 import BeautifulSoup
    from selenium import webdriver
    
    browser = webdriver.Firefox()
    browser.get("http://www.vogue.com/fashion-shows/fall-2016-menswear/fendi#collection")
    html_source = browser.page_source
    soup = BeautifulSoup(html_source, "html.parser")
    
    for item in soup.find_all("img", {"class":"grid-item--image"}):
        print(item.get('srcset'))
    

    这将显示以下类型的输出:

    http://assets.vogue.com/photos/569d37e434324c316bd70f04/master/w_195/_FEN0016.jpg
    http://assets.vogue.com/photos/569d37e5d928983d20a78e4f/master/w_195/_FEN0027.jpg
    http://assets.vogue.com/photos/569d37e834324c316bd70f0a/master/w_195/_FEN0041.jpg
    http://assets.vogue.com/photos/569d37e334324c316bd70efe/master/w_195/_FEN0049.jpg
    http://assets.vogue.com/photos/569d37e702e08d8957a11e32/master/w_195/_FEN0059.jpg
    ...
    ...
    ...
    http://assets.vogue.com/photos/569d3836486d6d3e20ae9625/master/w_195/_FEN0616.jpg
    http://assets.vogue.com/photos/569d381834324c316bd70f3b/master/w_195/_FEN0634.jpg
    http://assets.vogue.com/photos/569d3829fa6d6c9057f91d2a/master/w_195/_FEN0649.jpg
    http://assets.vogue.com/photos/569d382234324c316bd70f41/master/w_195/_FEN0663.jpg
    http://assets.vogue.com/photos/569d382b7dcd2a8a57748d05/master/w_195/_FEN0678.jpg
    http://assets.vogue.com/photos/569d381334324c316bd70f2f/master/w_195/_FEN0690.jpg
    http://assets.vogue.com/photos/569d382dd928983d20a78eb1/master/w_195/_FEN0846.jpg
    

    这允许页面的完整呈现在浏览器中进行,然后可以获得生成的 HTML。

    【讨论】:

    • 哦,太神奇了。非常感谢您的精彩提示。
    猜你喜欢
    • 2016-01-18
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2018-01-19
    相关资源
    最近更新 更多