利用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实现进程间通信简单实例
Jul 23 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
定制FileField中的上传文件名称实例
Aug 23 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
Python简单处理坐标排序问题示例
Jul 11 Python
python函数修饰符@的使用方法解析
Sep 02 Python
python装饰器练习题及答案
Nov 01 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
Feb 26 Python
Python实现对adb命令封装
Mar 06 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 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
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
python Django框架实现自定义表单提交
2016/03/25 Python
Python中动态创建类实例的方法
2017/03/24 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
Python内置模块logging用法实例分析
2018/02/12 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
Django  ORM 练习题及答案
2019/07/19 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
运动会的口号
2014/06/09 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书