利用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 运算符 供重载参考
Jun 11 Python
在Python下进行UDP网络编程的教程
Apr 29 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
详解Django通用视图中的函数包装
Jul 21 Python
pycharm中连接mysql数据库的步骤详解
May 02 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
Python安装tar.gz格式文件方法详解
Jan 19 Python
python实现人机五子棋
Mar 25 Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 Python
python 安全地删除列表元素的方法
Mar 16 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中strtotime函数使用方法分享
2012/01/10 PHP
php&amp;mysql 日期操作小记
2012/02/27 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python编码爬坑指南(必看)
2016/06/10 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
Python基础之文件读取的讲解
2019/02/16 Python
python+mysql实现教务管理系统
2019/02/20 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
高中军训第一天感言
2014/03/06 职场文书
班主任新年寄语
2014/04/04 职场文书
学校文明单位申报材料
2014/05/06 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
社团活动总结书
2014/06/27 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
Java基于字符界面的简易收银台
2021/06/26 Java/Android
windows11怎么查看wifi密码? win11查看wifi密码的技巧
2021/11/21 数码科技
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电
讨论nginx location 顺序问题
2022/05/30 Servers