1、导入相关包
from selenium import webdriver
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import time
from urllib import request
import re
2、定义代理,防止被服务器拦截
global headers
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN,zh;q=0.9',
'Connection':'keep-alive'}
3、定义函数,获取图片的url
driver = webdriver.Chrome()
def getimgurl(url):
imglist=[]#初始化图片url列表
driver.get(url)#完全载入之后才会进行下一步操作
execute_times(5)
#先利用slenium对网页进行处理
print(url)
html=driver.page_source
soup=BeautifulSoup(html,'html.parser')
try:
img_=soup.find_all('img') #找到所有含img的标签
except:
print('有问题')
pass
for each in img_:
a=str(each.get('srcset'))
if a!='None':
#由于网址的特殊构造,可以依据第一个问号出现之前的为图片的真正链接
for i in range(len(a)):
if a[i]=='?':
imglist.append(a[:i])
break
print(len(imglist))
download_img(imglist, n) # 利用获取的图片url获取图片
return print('Down')
4、定义对浏览器的操作,涉及到selenium
#函数,实现将滚轮滑到页面最下方的功能,这个在官方文档中有
# (为了让页面载入完整,每10秒下移一次=)
def execute_times(times):
for i in range(times+1):
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(10)
5、定义下载图片函数
def download_img(imglist,n):
global headers
for imgurl in imglist:
time.sleep(2)
n+=1
print('下载图片%s中' % n)
filename = ('E:\Pr\images%s.jpg'%n)
req = request.Request(url = imgurl, headers = headers)
binary_data = request.urlopen(req).read() #获取图片的二进制数据
temp_file = open(filename, 'wb') #创建文档
temp_file.write(binary_data)#将二进制文件写入文档中
temp_file.close() #关闭文档
#这种下载方法总是被禁 request.urlretrieve(imgurl, path + '%s.jpg' % n) # 下载图片,并以path+数字的格式进行命名
print('下载图片%s完毕' % n)
if n>20:
break