【Python】Python下载动态页面图片

1.搭建Selenium环境:

pip install selenium
到D:\python3.6.5\Lib\site-packages下把selenium文件夹复制到D:\python3.6.5\Lib

2.下载安装32位的chrome浏览器:

https://www.chromedownloads.net/chrome32win-stable/759.html
注意:需要使用32位的浏览器,如果本身有64位的,需要将其卸载,重装


3.下载安装相应版本的chromedriver(由于浏览器是最新版本,下载chromedriver最新版本):

http://chromedriver.storage.googleapis.com/index.html?path=2.38/
解压,将chromedriver.exe粘贴到chrome的安装目录,并添加到环境变量中:





如果报错:

说明版本不对应。

4.selenium.common.exceptions.WebDriverException: Message: ‘chromedriver’ executable needs to be in PATH.

将chromedriver.exe的地址写入py文件中:


browser=webdriver.Chrome(“C:/Users/wdh/AppData/Local/Google/Chrome/Application/chromedriver.exe”)

5.由于网页是动态加载的,所以一次打开网页并不能加载出所有的内容,这里使用Phantomjs抓取js动态加载的网页:


页面出来后不下拉网页的结果:10,在网页关闭之前下拉网页,读取到的‘_1pn7R’会多一些
利用js定位网页滚动条:
js=”var q=document.documentElement.scrollTop=10000″
driver.execute_script(js)

这里可以修改scrollTop 的值,来定位右侧滚动条的位置,0是最上面,10000是最底部。
增加加载网页的时间,以足够下拉到最底部,这里是120s

可以先将chrome的elements复制粘贴到word中,事先查询有多少个可以下载的图片,从而判断所预留的时间是否充足:


6.获得图片的下载地址,使用wget下载:

https://pypi.org/project/wget/#files下载wget包,解压,将文件夹复制到D:\python3.6.5\Lib
module ‘wget’ has no attribute ‘download’错误:将D:\python3.6.5\Lib\wget中的wget.py复制到D:\python3.6.5\Lib

测试test4.py:
import wget
wget.download(“https://unsplash.com/photos/Xe7WJc6ZV5k/download?force=true”)

下载到test4.py所在文件夹
例如:

wget.download(‘https://unsplash.com/photos/Xe7WJc6ZV5k/download?force=true’,’D:/python tests/ZQbizhi/picture/’)

效果截图(下载速度很慢):


from selenium import webdriver
import time
import re
import wget

class downloader(object):

    def __init__(self):
        self.server='https://unsplash.com/'
        self.urls=[]                #各图片的下载链接
        self.nums=0                 #下载的图片数

    def get_download_url(self):
        browser=webdriver.Chrome("C:/Users/wdh/AppData/Local/Google/Chrome/Application/chromedriver.exe")
        browser.get(self.server)
        js="var q=document.documentElement.scrollTop=10000" #网页加载到底端
        browser.execute_script(js)
        time.sleep(120) #给足够多的时间,这里设置为120s

        pattern=re.compile(r'a title="Download photo" href="(.*?)"')  #设置正则表达式,获取图片的下载地址
        result=pattern.findall(str(browser.page_source))
        #print(len(result))  #这里可以测试一下时间是否足够将所有图片都加载出来

        self.nums=len(result)
        for i in range(self.nums):
            self.urls.append(result[i]) #存储每幅图片的下载地址

    def get_pictures(self,i):
        wget.download(self.urls[i],'D:/python tests/ZQbizhi/picture/')  #将图片下载到文件夹中

if __name__=='__main__':
    dl=downloader()
    dl.get_download_url()
    print('开始下载!')
    for i in range(dl.nums):
        dl.get_pictures(i)
        print('\r','已下载:%d/%d' % (i+1,dl.nums),end='',flush=True)
    print('\r', '已下载:%d/%d' % (dl.nums,dl.nums),end='',flush=True)
    print('\n下载完成!')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值