我需要以编程方式加载HTML页面的内容,HTML页面的正文中有一个动态图像。然后,我想下载并保存这个图像,因为它显示了在页面加载中的时间。
HTML中的图像示例:
<img src="image.php">问题是,我不能只在http://example.com/image.php上获取PHP脚本的内容,因为它只会生成并返回另一个图像,而不是原始页面中生成的相同图像。
那么,如何保存在该页面中生成的图像呢?我知道我不能使用网页浏览器,因为它打开了一个实际的浏览器窗口。我正在考虑使用zope.testbrowser或者机械化,但是没有找到任何关于如何做的信息。
你们能帮帮我吗?
发布于 2015-07-24 23:15:08
解决了使用机械化,烹饪和urllib。
首先,设置导入和无头浏览器处理程序:
# Mechanize headless
import mechanize
import cookielib
import urllib
# Browser
br = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# Want debugging messages?
#br.set_debug_http(True)
#br.set_debug_redirects(True)
#br.set_debug_responses(True)加上“人”头,这样你就不会被误认为是机器人.
# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]现在,您可以使用open方法正常地“导航”。动态图像也可以用open加载。只需按照页面/文件层次顺序,机械化/烹饪将为您处理标题.
r = br.open('http://www.example.com/html-page-with-dynamic-image-embedded.html')
# Check if HTML content returned ok
if br.response().info()['Content-Type'] == 'text/html; charset=iso-8859-1':
# Now that the main page is loaded you can open the dynamic image
r = br.open('http://www.example.com/images/image.php')
# From here you just treat the image as you wish
png = r.read()
f = open('image-new-name.png', 'wb')
f.write(png)
f.close() 如果需要发送URL获取数据,则使用Urllib,如下所示
data = {'varName1': var1, 'varName2': var2, ...}
data = urllib.urlencode(data)
r = br.open('http://www.example.com/html-page-with-dynamic-image-embedded.html', data)发布于 2014-08-21 22:45:46
我仍然是个初学者--但我也用过类似的BeautifulSoup,从一个网站下载图片。
使用这个库应该很容易获得图像。
https://stackoverflow.com/questions/25433789
复制相似问题