如何解析最初在Python中没有返回结果的网页?

时间:2016-02-08 11:38:10

标签: python parsing request beautifulsoup

我想在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

1 个答案:

答案 0 :(得分: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。