利用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类的多重继承问题深入分析
Nov 09 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
python方向键控制上下左右代码
Jan 20 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
Python之列表的插入&amp;替换修改方法
Jun 28 Python
Python Flask前后端Ajax交互的方法示例
Jul 31 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
利用python 读写csv文件
Sep 10 Python
一劳永逸彻底解决pip install慢的办法
May 24 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设计模式 Interpreter(解释器模式)
2011/06/26 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
Python入门教程之运算符与控制流
2016/08/17 Python
Python进阶篇之字典操作总结
2016/11/16 Python
关于Python面向对象编程的知识点总结
2017/02/14 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
python针对excel的操作技巧
2018/03/13 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
JAVA代码查错题
2014/10/10 面试题
介绍一下grep命令的使用
2015/06/12 面试题
外贸业务员的岗位职责
2013/11/23 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
中华美德颂演讲稿
2014/05/20 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python