python爬虫网页中的图片_Python爬取网页中的图片(搜狗图片)详解
前言
最近几天,研究了一下一直很好奇的爬虫算法。这里写一下最近几天的点点心得。下面进入正文:
你可能需要的工作环境:
我们这里以sogou作为爬取的对象。
首先我们进入搜狗图片http://pic.sogou.com/,进入壁纸分类(当然只是个例子Q_Q),因为如果需要爬取某网站资料,那么就要初步的了解它…
进去后就是这个啦,然后F12进入开发人员选项,笔者用的是Chrome。
右键图片>>检查
发现我们需要的图片src是在img标签下的,于是先试着用 Python 的 requests提取该组件,进而获取img的src然后使用 urllib.request.urlretrieve逐个下载图片,从而达到批量获取资料的目的,思路好了,下面应该告诉程序要爬取的url为http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD,此url来自进入分类后的地址栏。明白了url地址我们来开始愉快的代码时间吧:
在写这段爬虫程序的时候,最好要逐步调试,确保我们的每一步操作正确,这也是程序猿应该有的好习惯。笔者不知道自己算不算个程序猿哈。线面我们来剖析该url指向的网页。
import requests
import urllib
from bs4 import BeautifulSoup
res = requests.get('http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD')
soup = BeautifulSoup(res.text,'html.parser')
print(soup.select('img'))
output:
发现输出内容并不包含我们要的图片元素,而是只剖析到logo的img,这显然不是我们想要的。也就是说需要的图片资料不在url 即 http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD里面。因此考虑可能该元素是动态的,细心的同学可能会发现,当在网页内,向下滑动鼠标滚轮,图片是动态刷新出来的,也就是说,该网页并不是一次加载出全部资源,而是动态加载资源。这也避免了因为网页过于臃肿,而影响加载速度。下面痛苦的探索开始了,我们是要找到所有图片的真正的url 笔者也是刚刚接触,找这个不是太有经验。最后找的位置F12>>Network>>XHR>>(点击XHR下的文件)>>Preview。
发现,有点接近我们需要的元素了,点开all_items 发现下面是0 1 2 3...一个一个的貌似是图片元素。试着打开一个url。发现真的是图片的地址。找到目标之后。点击XHR下的Headers
得到第二行
Request URL:
http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15&width=1536&height=864,试着去掉一些不必要的部分,技巧就是,删掉可能的部分之后,访问不受影响。经笔者筛选。最后得到的url:http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15 字面意思,知道category后面可能为分类。start为开始下标,len为长度,也即图片的数量。好了,开始愉快的代码时间吧:
开发环境为Win7 Python 3.6,运行的时候Python需要安装requests,
Python3.6 安装requests 应该CMD敲入:
pip install requests
笔者在这里也是边调试边写,这里把最终的代码贴出来:
import requests
import json
import urllib
def getSogouImag(category,length,path):
n = length
cate = category
imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag=%E5%85%A8%E9%83%A8&start=0&len='+str(n))
jd = json.loads(imgs.text)
jd = jd['all_items']
imgs_url = []
for j in jd:
imgs_url.append(j['bthumbUrl'])
m = 0
for img_url in imgs_url:
print('***** '+str(m)+'.jpg *****'+' Downloading...')
urllib.request.urlretrieve(img_url,path+str(m)+'.jpg')
m = m + 1
print('Download complete!')
getSogouImag('壁纸',2000,'d:/download/壁纸/')
程序跑起来的时候,笔者还是有点小激动的。来,感受一下:
至此,关于该爬虫程序的编程过程叙述完毕。整体来看,找到需要爬取元素所在url,是爬虫诸多环节中的关键
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
python爬虫网页中的图片_Python爬取网页中的图片(搜狗图片)详解相关推荐
- python爬虫(二十四)爬取汽车之家某品牌图片
爬取汽车之家某品牌图片 需求 爬取汽车之家某品牌的汽车图片 目标url https://car.autohome.com.cn/photolist/series/52880/6957393.html# ...
- python爬虫(一):正则表达式爬取网页文本
文章目录 1 正则表达式 2 网页文本爬取 2.1 单页文本 2.2 多页文本 2.2.1 演示文本 2.2.2 文本信息获取 3 实战记录 3.1 网页纯文本处理 3.1.1 常规网页 3.1.2 ...
- 用python爬取网页数据并存入数据库中源代码_Python爬取51cto数据并存入MySQL方法详解...
[] 实验环境 1.安装Python 3.7 2.安装requests, bs4,pymysql 模块 实验步骤1.安装环境及模块 可参考https://www.jb51.net/article/19 ...
- python爬虫数据分析项目 双十一_Python爬取淘宝商品数据,价值千元的爬虫外包项目!...
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 完整代码可以点击下方链 ...
- python爬虫公众号音频源代码_python爬取音频下载的示例代码
抓取"xmly"鬼故事音频 import json # 在这个url,音频链接为JSON动态生成,所以用到了json模块 import requests headers = { & ...
- Python 爬虫进阶篇-利用beautifulsoup库爬取网页文章内容实战演示
我们以 fox新闻 网的文章来举例子,把整篇文章爬取出来. 首先是标题,通过结构可以看出来 class 为 article-header 的节点下的 h1 里的内容即是标题,通过 string 可以获 ...
- python实现qq登录腾讯视频_Python爬取腾讯视频评论的思路详解
一.前提条件 安装了Fiddler了(用于抓包分析) 谷歌或火狐浏览器 如果是谷歌浏览器,还需要给谷歌浏览器安装一个SwitchyOmega插件,用于代理服务器 有Python的编译环境,一般选择Py ...
- Python爬虫实战(2)之爬取NBA球队各个球员头像图片
1.目标页面 2.页面分析 1.每个队的球员列表都在 class="team_name"的span下的a标签的href下 2.每个球员的头像图标url 为 class=" ...
- python爬虫入门实战---------一周天气预报爬取_Python爬虫入门实战--------一周天气预报爬取【转载】【没有分析...
Python爬虫入门实战--------一周天气预报爬取[转载][没有分析 Python爬虫入门实战--------一周天气预报爬取[转载][没有分析] 来源:https://blog.csdn.ne ...
最新文章
- putchar(c1)在C语言中表示,C语言中的getchar和putchar详解
- Netmeeting的四个端口
- Dokcer容器实战之部署论坛
- linux之ip route命令
- 高等数学下-赵立军-北京大学出版社-题解-练习12.2
- session 的 源码
- Python学习笔记:PMT与PV函数
- python几个版本的区别-Python的这几个版本不同
- 【设计模式】 模式PK:命令模式VS策略模式
- [Java] 蓝桥杯ADV-175 算法提高 三个整数的排序
- Windows Vista操作系统秘技(1-5)
- 无线AP与无线路由器都有些什么区别?(二)
- MessageBox的用法
- 印度官方语言有几种_印度货币上有17种语言,你知道每种语言有多少人在用吗?...
- Git commit文件提交到仓库失败原因——Author identity unknown
- Oracle AutoVue 使用范围
- CentOS-6.5操作系统环境安装优化
- 计算机主板上的模块安装和拆,更换计算机主板上的内存模块插槽需要多少费用?...
- 谈谈CornerStone这个工具的使用
- 一篇优秀的硕士毕业论文是怎么写成的
热门文章
- php产生订单号不重复,php如何生成不重复订单号
- 《深入理解 Spring Cloud 与微服务构建》第十四章 服务链路追踪 Spring Cloud Sleuth
- 【JAVA SE】第四章 变量和方法
- 系统监控之SNMP协议理解
- WordPress文章阅读量统计和显示(非插件, 刷新页面不累加)
- C#设计模式-策略者模式
- __set() And __get() 使用详解.
- QT中串口通信程序(转)
- XML类型的SQL参数
- Cesium中常用的一些地理数据文件 以及数据相关的东西