python3 requests库实现多图片爬取教程


Posted in Python onDecember 18, 2019

最近对爬虫比较感兴趣,所以就学了一下,看人家都在网上爬取那么多美女图片养眼,我也迫不及待的试了一下,不多说,切入正题。

其实爬取图片和你下载图片是一个样子的,都是操作链接,也就是url,所以当我们确定要爬取的东西后就要开始寻找url了,所以先打开百度图片搜一下

python3 requests库实现多图片爬取教程

然后使用浏览器F12进入开发者模式,或者右键检查元素

python3 requests库实现多图片爬取教程

注意看xhr,点开观察有什么不一样的(如果没有xhr就在网页下滑)

第一个是这样的

第二个是这样的

注意看,pn是不是是30的倍数,而此时网页图片的数量也在增多,发现了这个,进url看一下,首先看原网页源码

view-source:http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111121&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E7%BE%8E%E5%A5%B3&oq=%E7%BE%8E%E5%A5%B3&rsp=-1

再看看两个Requests URL的页面,发现都是这样的

不用管他,找我们要的信息,ObjURL,"ObjURL":"http:\/\/image.tianjimedia.com\/uploadimages\/2015\/131\/34\/545szi3x5s84_680x500.jpg"

就是这个,好,现在东西都找到在哪了,写程序咯

import re
import requests
import os
 
name=input('输入文件夹名称:')
robot='C:/Users/lenovo/Desktop/'+name+'/'
kv={'user-agent':'mozilla/5.0'}
 
#获取url对应的源码页面
def getHTMLText(url):
 try:
  r=requests.get(url,timeout=30,headers=kv)
  r.raise_for_status()
  r.encoding=r.apparent_encoding
  return r.text
 except:
  return ''
 
#解析url源码页面
def parserHTML(html):
#正则表达式为获取ObjURL
 pattern=r'"ObjURL":"(.*?)"'
 reg=re.compile(pattern)
 urls=re.findall(reg,html)
 return urls
 
#下载图片
def download(List):
 for url in List:
  try:
   path=robot+url.split('/')[-1]
   url=url.replace('\\','')
   r=requests.get(url,timeout=30)
   r.raise_for_status()
   r.encoding=r.apparent_encoding
   if not os.path.exists(robot):
    os.makedirs(robot)
   if not os.path.exists(path):
    with open(path,'wb') as f:
     f.write(r.content)
     f.close()
     print(path+' 文件保存成功')
   else:
    print('文件已经存在')
  except:
   continue
 
#通过Requests URL请求到更多的url源码页面
def getmoreurl(num,word):
 ur=[]
 url=r'http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word={word}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&cg=girl&pn={pn}&rn=30'
 for x in range(1,num+1):
#word为搜索关键词,num为想获取的页面数量
  u=url.format(word=word,pn=30*x)
  ur.append(u)
 return ur
 
def main():
 n=int(input('输入想下载多少张图片(n*30):'))
 word=input('输入想下载的图片:')
#初始页面url
 url='http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1499773676062_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word={word}'.format(word=word)
 html=getHTMLText(url)
 urls=parserHTML(html)
 download(urls)
#下面操作获取的更多页面图片
 url1=getmoreurl(n,word)
 for i in range(n):
  html1=getHTMLText(url1[i])
  urls1=parserHTML(html1)
  download(urls1)
 
main()

然后试一试效果

python3 requests库实现多图片爬取教程

我知道你们会原谅我的

以上这篇python3 requests库实现多图片爬取教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
Python实现简单http服务器
Apr 12 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
python tkinter图形界面代码统计工具
Sep 18 Python
python网络爬虫 Scrapy中selenium用法详解
Sep 28 Python
用Python解数独的方法示例
Oct 24 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
python上下文管理器异常问题解决方法
Feb 07 Python
在notepad++中实现直接运行python代码
Dec 18 #Python
简单了解python装饰器原理及使用方法
Dec 18 #Python
修改Pandas的行或列的名字(重命名)
Dec 18 #Python
Python3直接爬取图片URL并保存示例
Dec 18 #Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 #Python
Python谱减法语音降噪实例
Dec 18 #Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 #Python
You might like
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
JS模态窗口返回值兼容问题的完美解决方法
2016/05/28 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
javascript回调函数详解
2018/02/06 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
jQuery实现tab栏切换效果
2020/12/22 jQuery
[00:16]热血竞技场
2019/03/06 DOTA
Python读写ini文件的方法
2015/05/28 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
Python partial函数原理及用法解析
2019/12/11 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android