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 相关文章推荐
在Django中创建动态视图的教程
Jul 15 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
发布你的Python模块详解
Sep 15 Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
python实现决策树ID3算法的示例代码
May 30 Python
python3实现域名查询和whois查询功能
Jun 21 Python
Python3.0中普通方法、类方法和静态方法的比较
May 03 Python
在python中做正态性检验示例
Dec 09 Python
python无序链表删除重复项的方法
Jan 17 Python
Python利用matplotlib绘制折线图的新手教程
Nov 05 Python
教你用python控制安卓手机
May 13 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扩展imagick
2014/06/02 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
Redis构建分布式锁
2017/03/28 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
Python设计模式之抽象工厂模式
2016/08/25 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
经贸日语专业个人求职信范文
2013/12/28 职场文书
奥运会口号
2014/06/13 职场文书
中学教师个人总结
2015/02/10 职场文书
护理工作个人总结
2015/03/03 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
手把手教你实现PyTorch的MNIST数据集
2021/06/28 Python
Java中try catch处理异常示例
2021/12/06 Java/Android