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 Web框架Flask信号机制(signals)介绍
Jan 01 Python
python抓取百度首页的方法
May 19 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
python虚拟环境迁移方法
Jan 03 Python
Python和Go语言的区别总结
Feb 20 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
Python中使用gflags实例及原理解析
Dec 13 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
python单元测试框架pytest的使用示例
Oct 07 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
Python中基础数据类型 set集合知识点总结
Aug 02 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制作图型计数器的例子
2006/10/09 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
python实现的解析crontab配置文件代码
2014/06/30 Python
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
事业单位请假制度
2014/01/13 职场文书
班级寄语大全
2014/04/10 职场文书
公务员政审材料范文
2014/12/23 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
python如何将mat文件转为png
2022/07/15 Python