利用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中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
May 20 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
如何使用python把ppt转换成pdf
Jun 29 Python
python中的Elasticsearch操作汇总
Oct 30 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
简单了解django处理跨域请求最佳解决方案
Mar 25 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
解决keras backend 越跑越慢问题
Jun 18 Python
Python dict的常用方法示例代码
Jun 23 Python
Python Pandas常用函数方法总结
Jun 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和XSS跨站攻击的防范
2007/04/17 PHP
php array_walk() 数组函数
2011/07/12 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
js实现中文实时时钟
2020/01/15 Javascript
Python读写Excel文件的实例
2013/11/01 Python
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
python常用函数详解
2016/09/13 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
python进行两个表格对比的方法
2018/06/27 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
小学班主任个人总结
2015/03/03 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
预备党员群众意见
2015/06/01 职场文书
走进毛泽东观后感
2015/06/04 职场文书