利用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专用方法与迭代机制实例分析
Sep 15 Python
Python入门教程之if语句的用法
May 14 Python
python统计cpu利用率的方法
Jun 02 Python
python中管道用法入门实例
Jun 04 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
利用 python 对目录下的文件进行过滤删除
Dec 27 Python
python实现聚类算法原理
Feb 12 Python
Python类装饰器实现方法详解
Dec 21 Python
python调用接口的4种方式代码实例
Nov 19 Python
python可视化text()函数使用详解
Feb 11 Python
python之pygame模块实现飞机大战完整代码
Nov 29 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 获取远程文件内容的函数代码
2010/03/24 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
Javascript Math对象
2009/08/13 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
Python实现购物车购物小程序
2018/04/18 Python
HTML的form表单和django的form表单
2019/07/25 Python
python 实现按对象传值
2019/12/26 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
为什么说python适合写爬虫
2020/06/11 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
机关作风建设自查报告
2014/10/22 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL