【发布时间】:2018-03-02 23:59:53
【问题描述】:
我正在尝试使用以下方法从网页中提取图像: Python 2.7 + Selenium(使用 FireFox)+ Beautiful Soup。
页面动态加载,因此,我使用 Selenium 进行屏幕抓取。前端的一切看起来都很棒,但是,当我加载所有图像并查看 HTML 时,我看不到图像的链接。有什么想法可以在这里发生吗?
网站是https://flipp.com/flyers?postal_code=97035, 然后从那里导航到https://flipp.com/weekly_ad/1550082-big-5-sporting-goods-weekly-ad 以查看第一个每周广告(我的工作代码如下)。
为了让事情变得更奇怪,我可以看到图像正在检查器窗口中加载......但我仍然无法在 HTML 中看到它们。关于这里发生了什么的任何想法,以及如何获取更新的 HTML(图像加载后?)
这是我能够从 HTML 中提取的一组图像(通过附加 jpg)。这些仅用于将鼠标悬停在画布上时的弹出窗口。
我想要得到的实际上是构成实际页面/画布的图像。我可以看到它们通过(使用 Firefox 中的流量选项),但由于某种原因它们没有出现在 HTML 中。知道这里发生了什么吗?
工作代码:
#import packages
from time import gmtime, strftime,sleep, time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
#scraping packages
from bs4 import BeautifulSoup
USAPROXY = "177.84.23.122:3128"
def launch_webdriver(PROXY):
PROXY = PROXY
PROXY_HOST = PROXY.rpartition(':')[0]
PROXY_PORT = PROXY.rpartition(':')[2]
fp = webdriver.FirefoxProfile()
# Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5
fp.set_preference("network.proxy.type", 1)
fp.set_preference("network.proxy.http",PROXY_HOST)
fp.set_preference("network.proxy.http_port",int(PROXY_PORT))
fp.set_preference("network.proxy.ssl",PROXY_HOST)
fp.set_preference("network.proxy.ssl_port",int(PROXY_PORT))
fp.set_preference("general.useragent.override","whater_useragent")
fp.update_preferences()
return webdriver.Firefox(firefox_profile=fp)
def test():
driver = launch_webdriver(USAPROXY)
driver.set_page_load_timeout(11)
driver.get("https://flipp.com/flyers?postal_code=97035")
sleep(15)
driver.get("https://flipp.com/weekly_ad/1550082-big-5-sporting-goods-weekly-ad")
sleep(5)
my_html = driver.page_source
soup = BeautifulSoup(my_html,'lxml')
tags=soup.findAll('img') #prints only 3 imgs, there should be 100s
for tag in tags:print tag
print soup.prettify()
#execute script
test()
【问题讨论】:
-
图片很可能是通过 CSS 分配的。选择元素后,检查
Computed选项卡中的background-image。如果是这种情况,请使用element.value_of_css_property('background-image')获取源代码。