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修改注册表终止360进程实例
Oct 13 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
Python如何实现文本转语音
Aug 08 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
python数据归一化及三种方法详解
Aug 06 Python
Python逐行读取文件内容的方法总结
Feb 14 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
解决keras加入lambda层时shape的问题
Jun 11 Python
python 数据类型强制转换的总结
Jan 25 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 Python
Python Matplotlib绘制两个Y轴图像
Apr 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 随机生成10位字符代码
2009/03/26 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
列表内容的选择
2006/06/30 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
python实现udp数据报传输的方法
2014/09/26 Python
Python import用法以及与from...import的区别
2015/05/28 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
python实现两个文件合并功能
2018/04/01 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
python numpy 按行归一化的实例
2019/01/21 Python
python tkinter实现屏保程序
2019/07/30 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
pytorch的batch normalize使用详解
2020/01/15 Python
极简的HTML5模版
2015/07/09 HTML / CSS
优秀英语专业毕业生求职信
2013/11/23 职场文书
爱国卫生月实施方案
2014/02/21 职场文书
公司运动会策划方案
2014/05/25 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
详解Python中__new__方法的作用
2022/03/31 Python
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers