利用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字符串关键点
Dec 13 Python
Python使用asyncio包处理并发详解
Sep 09 Python
Django rest framework工具包简单用法示例
Jul 20 Python
python的concat等多种用法详解
Nov 28 Python
对python pandas 画移动平均线的方法详解
Nov 28 Python
python tkinter组件使用详解
Sep 16 Python
python 实现快速生成连续、随机字母列表
Nov 28 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
Python 使用 prettytable 库打印表格美化输出功能
Dec 26 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
Python实现SMTP邮件发送
Jun 16 Python
关于python中模块和重载的问题
Nov 02 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 strcmp使用说明
2010/04/22 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
Python操作MongoDB详解及实例
2017/05/18 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
set在python里的含义和用法
2019/06/24 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
python中setuptools的作用是什么
2020/06/19 Python
天网面试题
2013/04/07 面试题
家长给小学生的评语
2014/01/30 职场文书
文明村创建实施方案
2014/03/27 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
课程设计的心得体会
2014/09/03 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
2015年爱国卫生工作总结
2015/04/22 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
银行求职信范文
2019/05/13 职场文书
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python