python实现懒加载图片的下载
来源:互联网 发布:mac充电黄灯一直亮 编辑:程序博客网 时间:2024/04/25 21:51
最近接了一个需求,需要爬取阿里巴巴网站上指定网址的详情图片,想来是个很容易的事情,也就需要采集一下网页,在此基础上做一些匹配性质的操作就应该可以了,也就是顺手而为的事情。
说做就做,笔主使用python很快的把网页采集出来,很快的把需要的图片截取出来,很快的把图片下载下来(嗯,效率还是很快的)。好了,开始测试,输入网址列表的文本文件,等待。。。,恩,输出是空的,输出是空的!看下采集的网页文件,恩,网页里竟然不包含我需要的字段!!我在网页上明明能看到呀,为啥这边就没有呢?好吧,回去看下网页上为啥会有,原来人家使用了优化策略,详情是通过js的懒加载技术实现,代码中采集的网页当然不可能解析js了,肿么办呢?(跟人家说分分钟的事情Orz)
冷静!
现在想想我们要解析网页上的js我们有哪些方法,恩,我如果写一段js代码在浏览器里跑一下我就能得到我想要的图片列表,但是js不能帮我保存图片呢,恩,我可以将得到的图片url列表丢给后端让后端下载,批量下载后,打包,再在前端的页面上给个下载链接,供人下载(我真是个天才!!)。不过好麻烦啊,需要人参与的地方还是很多的,有没有什么可以优化的地方呢?要是可以在代码中加载浏览器内核就好了。
搜索中。。。
咦,发现个好东西,phantomjs selenium python,再次感叹下网络带来的便利性。相关的安装什么的我就不说了,其实也很简单啦!读者有兴趣可以自己装装。
好了,不说废话了,我们该干正事了。
首先,我们要抓取到我们需要的那段html代码,既然是懒加载,我们一直将控制条拖到最底部不就好啦!然后我们根据element的id就可以获得我们想要的那段代码,下面是实现详情。
def get_page_source(url): driver = webdriver.PhantomJS() driver.set_window_size(1120, 550) driver.get(url) lastHeight = driver.execute_script("return document.body.scrollHeight") while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(1) newHeight = driver.execute_script("return document.body.scrollHeight") if newHeight == lastHeight: break lastHeight = newHeight element = driver.find_element_by_id('desc-lazyload-container') outerhtml = element.get_attribute("outerHTML") driver.quit() return outerhtml
html代码片段有了,接下来我们该截取图片url字段了。
def get_image_url_list(html): url = [] for v in html.split(): if v.startswith('src="'): url.append(v.split('"')[1]) return url
下载呢?
def download_images(urls, pre='/tmp'): sfn = 11; for url in urls: file_name = '{}/{}.{}'.format(pre, sfn, url.split('.')[-1]) with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file: data = response.read() out_file.write(data) sfn +=1
顺便也贴个打包的代码吧!
def zipdir(path, ziph): for root, dirs, files in os.walk(path): for file in files: ziph.write(os.path.join(root, file))
好了,至此功能也算完成了,唯一不和谐的就是需求方那幽怨的眼神,说好的秒秒钟的事情呢!!
- python实现懒加载图片的下载
- python 实现下载图片
- Python实现下载ftp图片
- Python实现的图片批量下载(v3.5最新)
- jq实现图片的懒加载
- ionic+requirejs实现图片的懒加载
- 用jquery实现图片的懒加载
- 图片懒加载的几种实现
- js实现图片的懒加载
- Python加载图片的方法
- 【Python】下载图片的代码
- python实现批量下载贴吧图片
- python实现爬虫下载美女图片
- python实现爬虫下载美女图片
- 利用Python 实现下载百度图片
- Python爬虫——利用PhantomJS下载动态加载图片
- 图片延迟加载的实现
- 图片延迟加载的实现
- java + mysql + jdbc实现图片上传
- 【消息队列技术】nsq
- 操作系统中生产者/消费者问题(一)
- http-post
- innodb_index_stats导入备份数据时报错表主键冲突
- python实现懒加载图片的下载
- Apache2.4 与php7搭建环境(顺便搭上mysql)
- Java异常处理和设计
- [ 备战NOIP2016 ] 线段树
- C语言的存储类型
- libPhenom:Facebook开源的高性能C语言并发编程框架
- First Shot
- HDU 1576:A/B (乘法逆元)
- Linux下的目录及其操作命令(改变工作目录和显示目录内容的命令