利用python批量爬取百度任意类别的图片的实现方法


Posted in Python onOctober 07, 2020

利用python批量爬取百度任意类别的图片时:
(1):设置类别名字。
(2):设置类别的数目,即每一类别的的图片数量。
(3):编辑一个txt文件,命名为name.txt,在txt文件中输入类别,此类别即为关键字。并将txt文件与python源代码放在同一个目录下。

利用python批量爬取百度任意类别的图片的实现方法

python源代码:

# -*- coding: utf-8 -*-
"""
Created on Sun Sep 13 21:35:34 2020
@author: ydc
"""
import re
import requests
from urllib import error
from bs4 import BeautifulSoup
import os

num = 0
numPicture = 0
file = ''
List = []
def Find(url, A):
  global List
  print('正在检测图片总数,请稍等.....')
  t = 0
  i = 1
  s = 0
  while t < 1000:
    Url = url + str(t)
    try:
      # 这里搞了下
      Result = A.get(Url, timeout=7, allow_redirects=False)
    except BaseException:
      t = t + 60
      continue
    else:
      result = Result.text
      pic_url = re.findall('"objURL":"(.*?)",', result, re.S) # 先利用正则表达式找到图片url
      s += len(pic_url)
      if len(pic_url) == 0:
        break
      else:
        List.append(pic_url)
        t = t + 60
  return s
def recommend(url):
  Re = []
  try:
    html = requests.get(url, allow_redirects=False)
  except error.HTTPError as e:
    return
  else:
    html.encoding = 'utf-8'
    bsObj = BeautifulSoup(html.text, 'html.parser')
    div = bsObj.find('div', id='topRS')
    if div is not None:
      listA = div.findAll('a')
      for i in listA:
        if i is not None:
          Re.append(i.get_text())
    return Re
def dowmloadPicture(html, keyword):
  global num
  # t =0
  pic_url = re.findall('"objURL":"(.*?)",', html, re.S) # 先利用正则表达式找到图片url
  print('找到关键词:' + keyword + '的图片,即将开始下载图片...')
  for each in pic_url:
    print('正在下载第' + str(num + 1) + '张图片,图片地址:' + str(each))
    try:
      if each is not None:
        pic = requests.get(each, timeout=7)
      else:
        continue
    except BaseException:
      print('错误,当前图片无法下载')
      continue
    else:
      string = file + r'\\' + keyword + '_' + str(num) + '.jpg'
      fp = open(string, 'wb')
      fp.write(pic.content)
      fp.close()
      num += 1
    if num >= numPicture:
      return
if __name__ == '__main__': # 主函数入口
  headers = {
    'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Connection': 'keep-alive',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0',
    'Upgrade-Insecure-Requests': '1'
  }
  A = requests.Session()
  A.headers = headers
  ###############################
  tm = int(input('请输入每类图片的下载数量 '))
  numPicture = tm
  line_list = []
  with open('./name.txt', encoding='utf-8') as file:
    line_list = [k.strip() for k in file.readlines()] # 用 strip()移除末尾的空格
  for word in line_list:
    url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&pn='
    tot = Find(url, A)
    Recommend = recommend(url) # 记录相关推荐
    print('经过检测%s类图片共有%d张' % (word, tot))
    file = word + '文件'
    y = os.path.exists(file)
    if y == 1:
      print('该文件已存在,请重新输入')
      file = word + '文件夹2'
      os.mkdir(file)
    else:
      os.mkdir(file)
    t = 0
    tmp = url
    while t < numPicture:
      try:
        url = tmp + str(t)
        # result = requests.get(url, timeout=10)
        # 这里搞了下
        result = A.get(url, timeout=10, allow_redirects=False)
        print(url)
      except error.HTTPError as e:
        print('网络错误,请调整网络后重试')
        t = t + 60
      else:
        dowmloadPicture(result.text, word)
        t = t + 60
    # numPicture = numPicture + tm
  print('当前搜索结束,感谢使用')

到此这篇关于利用python批量爬取百度任意类别的图片的实现方法的文章就介绍到这了,更多相关python批量爬取百度图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python Tkinter GUI编程入门介绍
Mar 10 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
利用python实现微信头像加红色数字功能
Mar 26 Python
Python变量赋值的秘密分享
Apr 03 Python
matplotlib subplots 设置总图的标题方法
May 25 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
Django自关联实现多级联动查询实例
May 19 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
May 26 Python
python实现定时发送邮件到指定邮箱
Dec 23 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 Python
Python colormap库的安装和使用详情
Oct 06 #Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 #Python
Python3如何使用range函数替代xrange函数
Oct 05 #Python
Python threading模块condition原理及运行流程详解
Oct 05 #Python
Python urllib库如何添加headers过程解析
Oct 05 #Python
Python3获取cookie常用三种方案
Oct 05 #Python
Python collections.deque双边队列原理详解
Oct 05 #Python
You might like
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
Javascript学习指南
2014/12/01 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
js css自定义分页效果
2017/02/24 Javascript
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
jquery实现选项卡切换代码实例
2019/05/14 jQuery
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
python字符串的index和find的区别详解
2020/06/20 Python
python如何写try语句
2020/07/14 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
广告业务员岗位职责
2014/02/06 职场文书
《莫高窟》教学反思
2014/02/25 职场文书
转让协议书范本
2014/04/15 职场文书
公司门卫工作职责
2014/06/28 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
鼋头渚导游词
2015/02/05 职场文书
初一语文教学反思
2016/03/03 职场文书