利用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实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
python清除字符串里非数字字符的方法
Jul 02 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
python 性能优化方法小结
Mar 31 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
django开发post接口简单案例,获取参数值的方法
Dec 11 Python
Python 一句话生成字母表的方法
Jan 02 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
python opencv实现图像边缘检测
Apr 29 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 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
thinkPHP中分页用法实例分析
2015/12/26 PHP
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
跟老齐学Python之网站的结构
2014/10/24 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
python tkinter窗口最大化的实现
2019/07/15 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
Python jieba库分词模式实例用法
2021/01/13 Python
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
艺术学院毕业生求职信
2014/07/09 职场文书
学生上课说话检讨书
2014/10/25 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
写给导师的自荐信
2015/03/06 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js
Java版 单机五子棋
2022/05/04 Java/Android