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的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
python web基础之加载静态文件实例
Mar 20 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
Apr 06 Python
python指定写入文件时的编码格式方法
Jun 07 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
Python assert语句的简单使用示例
Jul 28 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
用Python开发app后端有优势吗
Jun 29 Python
python3实现简单飞机大战
Nov 29 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
ajax缓存问题解决途径
2006/12/06 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
Hadoop中的Python框架的使用指南
2015/04/22 Python
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
宝塔面板成功部署Django项目流程(图文)
2020/06/22 Python
python如何调用php文件中的函数详解
2020/12/29 Python
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
矿泉水广告词
2014/03/20 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
家装电话营销开场白
2015/05/29 职场文书
行政处罚决定书
2015/06/24 职场文书
Nginx快速入门教程
2021/03/31 Servers
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技