原文:https://blog.csdn.net/heart__gx/article/details/80818344
前期准备:

  1. requests安装

可以直接在命令提示符中输入pip命令直接安装

pip install requests

或者直接下载python库(https://pypi.org/),进入目录中执行代码安装

python setup.py install
  1. requests安装
  2. python正则模块安装和使用

python的正则模块是re,这里主要用到的函数是:findall(pattern,str,re.S)
(re.S的意思是让"."可以匹配换行符,不然有些标签头和尾是分几行的,就会匹配失败)
正则表达式用到的是:

(.*?)
( )  #表示这个内容是我们需要提取的.*  #表示匹配任意字符0-n次
?   #表示非贪心,找到第一个就停下来

分析网页:
按F12打开开发者工具

1.点击开发者工具左上角的鼠标跟随;
2.鼠标移动到图片点击;
3.复制开发者工具里图片的地址。
4.在网页空白处,鼠标右键点击查看网页源代码
5.Ctrl+F打开搜索框,粘贴刚刚复制的图片地址


找到图片地址,发现有四个地址thumbURL,middleURL,hoverURL,objURL,我们用哪个呢,通过打开网页发现,objURL是最清晰的,所以我们选择用objURL(其他几个也行)

编写代码:
我们要用到2个包,一个是正则(re),一个是requests包

#-*- coding:utf-8 -*-
import re
import requests

复制搜索页面的网址
把网址粘过来,传入requests,写好正则表达式

url = 'http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E5%B0%8F%E9%BB%84%E4%BA%BA'html = requests.get(url).text
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)

另外,还要写一个循环,加载多张图片,这里由于有些图片可能存在网址打不开的情况,加个5秒超时控制。

#正则表达式,最小匹配原则
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
i = 0
for each in pic_url:print eachtry:pic= requests.get(each, timeout=5)except requests.exceptions.ConnectionError:print '【错误】当前图片无法下载'continue

再就是把网址保存下来,我们在事先在当前目录建立一个pictures目录,把图片都放进去,命名的时候,用数字命名

string = 'pictures\\'+str(i) + '.jpg'fp = open(string,'wb')fp.write(pic.content)fp.close()i += 1

加一个关键字搜索

word = raw_input("Input key word: ")url = 'http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=' + word result = requests.get(url)

最终代码:

# -*- coding:utf-8 -*-
import re
import requestsdef dowmloadPic(html, keyword):pic_url = re.findall('"objURL":"(.*?)",', html, re.S)i = 0t = 0print('找到关键词:' + keyword + '的图片,现在开始下载图片...')for each in pic_url:print('正在下载第' + str(t + 1) + '张图片,图片地址:' + str(each))t += 1try:pic = requests.get(each, timeout=5)except requests.exceptions.ConnectionError:print('【错误】当前图片无法下载')continuestring = 'pictures\\' + keyword + '_' + str(i) + '.jpg'# resolve the problem of encode, make sure that chinese name could be storefp = open(string, 'wb')fp.write(pic.content)fp.close()i += 1if __name__ == '__main__':word = input("请输入关键词: ")url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1530013590757_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=' + wordresult = requests.get(url)dowmloadPic(result.text, word)

然而,运行之后发现只能下载30张图片,为什么呢?原来是ajax异步请求加载图片,百度图片一开始只加载30张图片,当我们往下滑动滚动条时,页面会动态加载1条json数据,每条json数据里面包含了30条信息,信息里面又包含了图片的URL,JavaScript会将这些url解析并显示出来。这样,每次滚动到底就又多出30张图片。
通过网上查询资料和请教同学,我又对之前的代码做了一些修改

再次分析网页:
再次进入小黄人搜索页面,打开开发者工具,点击Network–XHR–acjson?tn…(下拉网页可看到)–Headers
可以看到Query String Parameters里面的数据变化情况:
word:我们搜索的关键字
pn:当前加载的图片数量,每次增加30,依次增加
rn:每页有30张图片
gsm:pn值的十六进制数,每次也是增加十进制的30

编写代码

import requests
import osdef getManyPages(keyword,pages):params=[]for i in range(30,30*pages+30,30):params.append({'tn': 'resultjson_com','ipn': 'rj','ct': 201326592,'is': '','fp': 'result','queryWord': keyword,'cl': 2,'lm': -1,'ie': 'utf-8','oe': 'utf-8','adpicid': '','st': -1,'z': '','ic': 0,'word': keyword,'s': '','se': '','tab': '','width': '','height': '','face': 0,'istype': 2,'qc': '','nc': 1,'fr': '','pn': i,'rn': 30,'gsm': '1e','1488942260214': ''})url = 'https://image.baidu.com/search/acjson'urls = []for i in params:urls.append(requests.get(url,params=i).json().get('data'))return urlsdef getImg(dataList, localPath):if not os.path.exists(localPath):  # 如果给定的路径不存在文件夹,新建文件夹os.mkdir(localPath)x = 0for list in dataList:for i in list:if i.get('thumbURL') != None:print('正在下载:%s' % i.get('thumbURL'))ir = requests.get(i.get('thumbURL'))open(localPath + '%d.jpg' % x, 'wb').write(ir.content)x += 1else:print('图片链接不存在')if __name__ == '__main__':word = input("请输入关键词: ")j = input("请输入页数: ")dataList = getManyPages(word,(int (j)))  # 参数1:关键字,参数2:要下载的页数getImg(dataList,'e:/Python/test1/pictures2/') # 参数2:指定保存的路径

python爬虫实践_百度图片相关推荐

  1. python爬虫抓取百度图片_Python爬虫抓取百度的高清摄影图片

    成果预览: 源代码: import requests import re url = 'https://image.baidu.com/search/index' headers = { 'User- ...

  2. python爬虫爬取百度图片总结_爬虫篇| 爬取百度图片(一)

    什么是爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模 ...

  3. python爬虫爬取百度图片总结_python爬虫如何批量爬取百度图片

    当我们想要获取百度图片的时候,面对一张张图片,一次次的点击右键下载十分麻烦.python爬虫可以实现批量下载,根据我们下载网站位置.图片位置.图片下载数量.图片下载位置等需求进行批量下载,本文演示py ...

  4. python爬虫爬取百度图片,python爬虫篇2:爬取百度图片

    入门级 import requests import re import os from urllib import error def main(): dirPath = "E:\pyth ...

  5. python爬虫爬取百度贴吧图片,requests方法

    每天一点点,记录学习 近期爬虫项目,看完请点赞哦---: 1:python 爬取菜鸟教程python100题,百度贴吧图片反爬虫下载,批量下载 2:python爬虫爬取百度贴吧图片,requests方 ...

  6. mac用python爬虫下载图片_使用Python爬虫实现自动下载图片

    python爬虫支持模块多.代码简洁.开发效率高 ,是我们进行网络爬虫可以选取的好工具.对于一个个的爬取下载,势必会消耗我们大量的时间,使用Python爬虫就可以解决这个问题,即可以实现自动下载.本文 ...

  7. python爬虫爬取百度文档

    使用python爬虫爬取百度文档文字 话不多说,直接上代码! import requests import reheaders = {"User-Agent": "Moz ...

  8. Python爬虫爬取相关图片

    简要的实现实现Python爬虫爬取百度贴吧页面上的图片,下面的网页就是本篇博客所要爬的网页,当然看到的只是其中的一部分图片,是所要爬取的页面, 而下图则是最终的爬取的图片: 接下来就简要的讲讲爬取的整 ...

  9. python爬虫实践--晋江小说书籍分析

    系列文章目录 python爬虫实践–晋江小说书籍分析 python爬虫实践-腾讯视频弹幕分析 python爬虫实践-B站弹幕分析 文章目录 系列文章目录 目录 爬取晋江排行榜 爬取文案 其它想法 结语 ...

最新文章

  1. 修改MySQL日志文件位置
  2. JavaScript学习 九、事件
  3. python苹果下载软件助手哪个好_Mac上有什么实用的必备软件?
  4. 编码utf-8的不可映射字符_不要在 MySQL 中使用“utf8”,请使用“utf8mb4”
  5. HP-JavaUtil: xls 操作类
  6. C语言浮点数的输出方法和示例
  7. mysql数据备份数据解决方案_MYSQL数据备份解决方案
  8. oracle10g无监听配置文件,关于监听配置文件listener.ora的问题
  9. 数字栅格地图矢量化及三维显示教程
  10. 打印机服务器不存在修复,win10电脑安装打印机提示处理器不存在_win10添加打印机错误“打印处理器不存在的修复办法-爱纯净...
  11. 电脑c盘格式化,如何恢复C盘文件?
  12. Problem B 1076 素数
  13. python操作excel编号自增加1
  14. CENTOS 7 添加黑名单禁止IP访问服务器
  15. 布袋除尘器过滤风速多少_布袋式除尘器过滤风速一般多大
  16. 使用Python将TXT文本内容读取后生成指定XML格式的文件
  17. vue中长时间未操作就会强制退出
  18. 不相关、独立、正交的区别与联系
  19. 做好Presentation的五个原则(转载)
  20. 大专学历计算机专业高薪工作,大专毕业一年,工资三千多,计算机行业高薪路茫茫(下)...

热门文章

  1. APP在线制作平台,终极技术哪家强?
  2. mysql的回收站Recycle_bin功能使用
  3. HDU - 128 确定比赛名次(基于有向无环图(GAD)的排序--拓扑排序)
  4. div css布局中CSS图片大小自动按比例等比例缩小图片不变形解决技巧(转)
  5. the following arguments are required: DIR
  6. PS老照片修复软件AKVIS,翻新效果不得不服
  7. LINUX I2C驱动偶尔出现段错误原因之一
  8. 多维随机变量及其分布(四):
  9. 2020年电工(高级)考试题库及电工(高级)考试内容
  10. 2020互联网数据分析师教程视频 统计学分析与数据实战 r语言数据分析实战 python数据分析实战 excel自动化报表分析实战 excel数据分析处理实战