利用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网络编程学习笔记(六):Web客户端访问
Jun 09 Python
Python实现的一个找零钱的小程序代码分享
Aug 25 Python
Python实现身份证号码解析
Sep 01 Python
Python使用filetype精确判断文件类型
Jul 02 Python
python绘制条形图方法代码详解
Dec 19 Python
基于python实现KNN分类算法
Apr 23 Python
Python中整数的缓存机制讲解
Feb 16 Python
Python实现微信好友的数据分析
Dec 16 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
Python如何实现爬取B站视频
May 20 Python
python和JavaScript哪个容易上手
Jun 23 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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
jQuery版仿Path菜单效果
2011/12/15 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
微信开发 js实现tabs选项卡效果
2016/10/28 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
python二分法实现实例
2013/11/21 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
python的常用模块之collections模块详解
2018/12/06 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
python有几个版本
2020/06/17 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
励志演讲稿500字
2014/08/21 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
canvas多重阴影发光效果实现
2021/04/20 Javascript
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python