1、关键点
- 使用selenium模拟游览器,并动态调用脚本,模拟登陆及搜索操作
- 下拉刷新
- 创建文件夹、获取文件
- 下载资源
2、完整源码
#该例子在2018.8.29测试可运行
from selenium import webdriver
from bs4 import BeautifulSoup
import os
import requests
import time
from selenium.webdriver.common.keys import Keys
brower=webdriver.PhantomJS()
class DownPicture():
def __init__(self):
self.folder_path = 'C:\HuaPicture'
#----------------------------保存图片------------------------------------
def save_img(self, url, file_name):
print('开始请求图片地址...',url)
img = requests.get(url)
print('开始保存图片...')
f = open(file_name, 'ab')
f.write(img.content)
print('图片保存成功!',file_name)
f.close()
#----------------------------创建文件夹------------------------------------
def mkdir(self, path):
isExists = os.path.exists(path)
if not isExists:
print('创建名字叫做', path, '的文件夹')
os.makedirs(path)
print('创建成功!')
return True
else:
print(path, '文件夹已经存在了,不再创建')
return False
#----------------------------下拉刷新------------------------------------
def scroll_down(self, driver, times):
for i in range(times):
print("开始执行第", str(i + 1),"次下拉操作")
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") #执行JavaScript实现网页下拉倒底部
print("第", str(i + 1), "次下拉操作执行完毕")
print("第", str(i + 1), "次等待网页加载......")
time.sleep(5)
#----------------------------主函数,获得图片------------------------------------
def get_pic(self):
browser = webdriver.PhantomJS()
browser.maximize_window()
browser.get('http://huaban.com')
time.sleep(10)
#登录
browser.execute_script("app.requireLogin('', {to: 'login'});return false;")
time.sleep(1)
loginName = browser.find_element_by_name("email")
loginPwd = browser.find_element_by_name("password")
loginBtn = browser.find_elements_by_partial_link_text("登录")
loginName.send_keys("838613546@qq.com")
loginPwd.send_keys("******")
loginBtn[1].click()
print("登录成功")
time.sleep(10)
#搜索
search = browser.find_element_by_id("query") #搜索框
search.clear()
search.send_keys("花")
search.send_keys(Keys.RETURN)
time.sleep(5)
#下拉加载数据
self.scroll_down(browser, 4)
#使用BeautifulSoup,页面数据文档化
all_a = BeautifulSoup(browser.page_source, 'lxml').find_all('img')
#创建文件夹
is_new_folder = self.mkdir(self.folder_path)
os.chdir(self.folder_path) #切换路径至上面创建的文件夹
file_names = os.listdir(self.folder_path)#获取文件家中的所有文件名,类型是list
for a in all_a:
img_url = a['src']
if 'http' not in img_url:
img_url="http:"+img_url
if 'img.hb.aicdn.com' not in img_url:
continue
name_start_pos = img_url.index('.com/') + 5 #通过找.com/的位置,来确定它之后的字符位置
img_name = img_url[name_start_pos:] + '.jpg'
if is_new_folder:
self.save_img(img_url, img_name) # 调用save_img方法来保存图片
else:
if img_name not in file_names:
self.save_img(img_url, img_name) # 调用save_img方法来保存图片
else:
print("该图片已经存在:", img_name, ",不再重新下载。")
beauty = DownPicture() #创建类的实例
beauty.get_pic() #执行类中的方法
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。