网页qq抓取什么原理( Python批量抓取图片(1)--使用Python图片)
优采云 发布时间: 2022-02-09 16:24网页qq抓取什么原理(
Python批量抓取图片(1)--使用Python图片)
——相信大家一定看过文章前段时间的一篇文章《就因为我写了爬虫,公司200多人被捕!》公众号文章(The 文章 的描述已经很明显了,大家都很清楚)
可以说,因为恐慌和骚动,一些三二线爬虫工程师紧急转行。其次,一些朋友对自己学到的爬虫技术感到担忧和恐慌。
事实上,每个人都有这种警惕性。但是,没有必要进行诸如转业之类的大战斗。我们应该从业务本身做起,不仅要提升自己的业务能力,还要熟悉互联网法律法规。虽然我不是亲自学习爬虫的技术,但是平时很喜欢学习一些爬虫的小项目和小玩意儿。虽然我花在学习算法上的时间比例会少很多,但我个人还是喜欢尝试一些新的。技术来丰富自己的业务水平,从这个角度来看,大部分工程师都会有这种业务倾向。当然,对于那些站在互联网第一线的爬虫工程师和大佬们来说,我只是大海中的一滴水,水滴的数量是远远不够的。
说起来,归根结底是一些公司和公司员工对法律的认识不够,公司对员工的法律宣传和商业道德也没有起到潜移默化的作用,尤其是互联网法律法规的传递。思想工作没有及时到位。当然,这些也不能总是靠公司,主要还是靠个人的认知。既然你已经做过这个业务,你应该了解和学习这个行业的法律知识。为此,作为这个时代科技创新和技术研发的一员,我们必须始终遵守互联网法律法规,做好本职工作,为社会多做贡献。
文章目录:
- 写在前面的话
1 - 捕获工件
2 - 使用Python批量抓取图片
(1)抓取对象:搜狗图库(2)抓取类别:进入搜狗壁纸(3)使用requests提取图片组件(4)找到图片的真实url( 5)批量抓图成功
今天就开始学习我们的内容吧~~
1 - 捕获工件
我一直很喜欢的一个谷歌图片抓取插件叫做 ImageAssistant
目前用户数为114567,可以说是非常不错了。
它的工作原理与 Python 批量抓取图像完全一样
我不是为谷歌做广告,我只是分享给大家,因为我认为它对提高大家的办公效率很有用。当然,本节最重要的是学习Python中批量抓图的原理和方法。
下面简单介绍一下插件的使用。安装插件后记得选择存放文件的地方,在谷歌设置下关闭下载查询访问。
(不然每次都得按保存,很麻烦。如果有100张图,你肯定要按100次)
安装插件后,下面是抓取过程的简单视频演示
比如:去微博抢鞠婧祎*敏*感*词*姐的照片,
进入后右击IA工具即可
2 - 使用Python批量抓取图片
注:文中Grab的意思是“抓取”
(1)抓取对象:搜狗图库
(2)抓取分类:进入搜狗壁纸,打开网页源码(快捷键为F12)
由于我使用的是谷歌 chrome 浏览器,所以要找到 img 标签
(3)使用requests提取图片组件
爬取思路和使用库文件请求
可以发现图片src存在于img标签下,所以使用Python的requests提取组件获取img的src,然后使用库urllib.request.urlretrieve将图片一一下载,从而达到批量获取数据的目的。
开始爬取第一步:
(注:Network-->headers,然后用鼠标点击左侧菜单栏(地址栏)的图片链接,然后在headers中找到图片url)
下面就是按照上面的思路来爬取我们想要的结果: 搜索网页代码后,得到的搜狗图片的url为:
%B1%DA%D6%BD
这里的url来自进入分类后的地址栏(如上图)。
分析源码分析上述url指向的网页
import requests #导入库requestsimport urllib #导入库requests下面的urllibfrom bs4 import BeautifulSoup #使用BeautifulSoup,关于这个的用法请查看本公众号往期文章#下面填入urlres = requests.get('http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD')soup = BeautifulSoup(res.text,'html.parser')print(soup.select('img')) #图片打印格式
结果
从上面的执行结果来看,打印输出中并没有我们想要的图片元素,只是解析了tupian130x34_@1x的img(或者网页中的logo),这显然不是我们想要的。也就是说,需要的图片数据不在url下,也就是不在下面的url中
%B1%DA%D6%BD。
因此,下面需要找到图片不在url中的原因并进行改进。
开始爬取第二步:
考虑到图片元素可能是动态的,细心的人可能会发现,在网页中向下滑动鼠标滚轮时,图片是动态刷新的,也就是说网页不是一次性加载所有资源,而是动态地加载资源。这也避免了由于网页过于臃肿而影响加载速度。
(4)找到图片的真实url
找到所有图片的真实url似乎有点困难,但是在这个项目中尝试一下也不是不可能的。在接下来的学习中不断研究,我想我会逐渐提高自己的业务能力。
类似于开始抓取第一步中的“笔记”,我们找到位置:
F12——>>网络——>>XHR——>>(点击XHR下的文件)——>>预览
(注:如果在预览中没有找到内容,可以滚动左侧地址栏或点击图片链接)
从上图看来,图中的信息就是我们需要的元素。点击all_items,发现下面是0 1 2 3... 一个一个好像是图片元素的数据。
尝试打开一个网址。找到图片的地址
我们可以任意选择其中一个图片的地址来验证是否是图片所在的位置:
将地址粘贴到浏览器中,搜索如下结果,说明这个地址的url就是我们要找的
找到上图的目标后,我们点击XHR下的Headers,也就是第二行
请求网址:
%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=180&len=15&width=1366&height=768
尽量去掉一些不必要的部分,去掉以上部分后不影响访问。
(删掉的位置跟同一个地方差不多,记住长宽高后面就不用删了)
例如:删除“=%E5%A3%81%E7%BA%B8&tag”得到
%E5%85%A8%E9%83%A8&start=180&len=15&width=1366&height=768
将此网站复制到浏览器访问中,得到如下结果:
url中的category为类别,start为开始下标,len为长度,即图片数量。
另外,在imges下,注意url内容的填充(不要直接复制url)
当替换为“+”时
(5)批量抓图成功
如果你的电脑没有库文件请求,记得用 cmd 命令安装:
pip 安装请求
最后经过不断的排序,源码如下:
import requestsimport json #使用json码import urllibdef 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 = [] #在url获取图片imgs 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,'F:/Py666/抓图/') #抓取后图片存取的本地位置
执行程序:到指定位置找到图片存在的位置,大功告成。
- 结尾 -
你好!
贡献--->展示你的才华
请发送电子邮件至
注明标题 [提交]
告诉我们
你是谁,你来自哪里,你投什么