利用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的Django框架下管理站点的基本方法
Jul 17 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
微信跳一跳python辅助软件思路及图像识别源码解析
Jan 04 Python
利用pandas读取中文数据集的方法
Jul 25 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
python实现同一局域网下传输图片
Mar 20 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
python实现发送邮件
Mar 02 Python
django上传文件的三种方式
Apr 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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
JavaScript访问样式表代码
2010/10/15 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
用pycharm开发django项目示例代码
2019/06/13 Python
python 消费 kafka 数据教程
2019/12/21 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
毕业自我鉴定
2013/11/05 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
二年级学生评语大全
2014/04/23 职场文书
申论倡议书范文
2014/05/13 职场文书
银行业务授权委托书
2014/10/10 职场文书
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL
Redis主从复制操作和配置详情
2022/09/23 Redis