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下载完成!')