利用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使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
django js实现部分页面刷新的示例代码
May 28 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
Django网络框架之HelloDjango项目创建教程
Jun 06 Python
python求最大值,不使用内置函数的实现方法
Jul 09 Python
python读取.mat文件的数据及实例代码
Jul 12 Python
python 消除 futureWarning问题的解决
Dec 25 Python
关于tf.reverse_sequence()简述
Jan 20 Python
python默认参数调用方法解析
Feb 09 Python
pytorch实现CNN卷积神经网络
Feb 19 Python
详解python的super()的作用和原理
Oct 29 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语法(4)
2006/10/09 PHP
openPNE常用方法分享
2011/11/29 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
加速IE的Javascript document输出的方法
2010/12/02 Javascript
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
Jquery Ajax xmlhttp请求成功问题
2015/02/04 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
了解重排与重绘
2019/05/29 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
Python中操作符重载用法分析
2016/04/29 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
Python matplotlib实时画图案例
2020/04/23 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
开展批评与自我批评发言材料
2014/10/17 职场文书
项目验收申请报告
2015/05/15 职场文书