我想在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
答案 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。