python selenium 爬必应搜索高清大图--多线程

必应搜索国内版 https://cn.bing.com/images ,这里搜索到的图片质量还不错。
在这里插入图片描述
程序运行画面
在这里插入图片描述
以搜索关键词建立文件夹存放图片
在这里插入图片描述
在这里插入图片描述

全部代码

from selenium import webdriver
from selenium.webdriver.common import keys
from bs4 import BeautifulSoup
import requests
import os
import re
import time
import threading

headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36'
}

keyword = ''

# 获取页面所有的图片地址
def getallurl():
    global keyword  # 声明全局变量
    keyword = input('请输入搜索关键词:')

    if len(keyword) > 0:
        browser = webdriver.Chrome()
        browser.get('https://cn.bing.com/images')
        time.sleep(1)

        browser.find_element_by_xpath('//*[@id="sb_form_q"]').send_keys(keyword, keys.Keys.ENTER)  # 输入关键词
        time.sleep(1)

        browser.find_element_by_class_name("fltIdtTit").click()  # 点击筛选
        time.sleep(1)

        browser.find_element_by_class_name("ftrLi").click()  # 点击图片尺寸
        time.sleep(1)

        browser.find_element_by_xpath('//*[@id="ftrB"]/ul/li[1]/div/div/a[5]').click()  # 选择特大
        time.sleep(1)

        i = 0
        while i <= 2:  #滚动页面次数
            js = "var q=document.documentElement.scrollTop=10000"
            browser.execute_script(js)  # 下拉滚动条
            i = i + 1
            time.sleep(5)  # 等待页面加载5秒

        allhtml = browser.page_source  # 获取页面源代码
        browser.quit()  # 拿到页面源代码后关闭浏览器

        bs = BeautifulSoup(allhtml, 'lxml')
        list01 = bs.find_all('a', class_='iusc')  # 获取所有class='iusc'的<a>标签
        src_list = re.findall(r'\"murl\"\:\"(.*?)\"\,\"', str(list01))  # 正则匹配图片地址

        return src_list  # 返回函数值
    else:
        print('我的世界一片空白^_^')
        getallurl()


# 下载图片
semaphore = threading.BoundedSemaphore(3)  # 最多允许3个线程同时运行(带宽够大的话可以开多几个线程,确保下载成功率)
def saveimg(src, keyword):
    semaphore.acquire()  # 加锁
    savepath = 'd://cnbing//' + keyword  # 保存路径,以关键词分类做文件夹名
    name = src.split('/')[-1]  # 截取图片地址‘/’右边第一段做文件名
    filename = savepath + '//' + name  # 拼接成保存图片的绝对路径
    # print(filename)
    try:
        if not os.path.exists(savepath):
            os.makedirs(savepath)  # 创建多级目录 os.makedirs  | 创建单个目录 os.mkdir
        if not os.path.exists(filename):
            r = requests.get(src, headers=headers, timeout=(3, 7))  # timeout(3,7)表示的连接时间是3秒,响应时间是7秒
            with open(filename, 'wb') as f:  # 保存图片
                f.write(r.content)
                print(src + '  下载完成 ')
    except:
        print('保存出错')
    semaphore.release()  # 解锁


# 程序入口
def main():
    src_list = getallurl()  # 获取函数返回的值
    start_time = time.time()

    # 多线程调用函数saveimg 保存图片
    ts = []
    for src in src_list:
        t = threading.Thread(target=saveimg, args=(src, keyword))  # 创建线程
        t.start()  # 启动线程
        ts.append(t)  # 把线程追加到列表
    for x in ts:  # 等待所有线程结束
        x.join()

    alltime = time.time()- start_time
    print('耗时:',alltime)

    '''
    #单线程调用函数saveimg 保存图片
    for src in src_list:
        saveimg(src,keyword)  #循环调用保存图片函数  
    '''


if __name__ == '__main__':
    main()


在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值