利用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 相关文章推荐
在Django框架中编写Context处理器的方法
Jul 20 Python
Python+微信接口实现运维报警
Aug 27 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Python命令行解析模块详解
Feb 01 Python
python让列表倒序输出的实例
Jun 25 Python
Python操作json的方法实例分析
Dec 06 Python
numpy数组之存取文件的实现示例
May 24 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
Python中断多重循环的几种方式详解
Feb 10 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
Jul 01 Python
python如何求圆的面积
Jul 01 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
php4的session功能评述(一)
2006/10/09 PHP
PHP安全技术之 实现php基本安全
2010/09/04 PHP
php变量范围介绍
2012/10/15 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
奇妙的js
2007/09/24 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
印尼网上商店:Alfacart.com
2019/03/11 全球购物
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
品管员岗位职责
2013/11/10 职场文书
办公室文员工作职责
2014/01/31 职场文书
房产委托公证书样本
2014/04/04 职场文书
部门2015年度工作总结
2015/04/29 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python
Python matplotlib绘制雷达图
2022/04/13 Python