实战1:抓取花瓣图片

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()  #执行类中的方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,018评论 3 119
  • 代码审查注意事项 数据库部分: 重申,数据库表字段定义禁止“可null”,如有相关需求,用空字符串或自己定义的特殊...
    环零弦阅读 418评论 0 1
  • 文明是错综复杂而又很不稳定的人际关系网络, 建立起来很辛苦, 但摧毁很容易。 -完- ©严正法律声明 本文版权受我...
    更好时代阅读 57评论 0 0
  • 这个细节谁懂?真实的淳贵人才是一只披着羊皮的狼!细思极恐! 哈喽大家好,甄嬛传想必大家都看过吧,大家都记得淳贵人这...
    甄嬛传的那些事阅读 384评论 0 1
  • 今天下午,妈妈带我去诗柳语言培训班。老师非常逗,有时候很凶,小朋友也很搞笑,我告诉你们一个秘密,其实爸爸妈...
    小依涵阅读 150评论 4 3