自动化爬虫:抓取图片

  • 目标
  • 思路
  • 准备
  • 正式开始
  • 全部代码及总结

完整代码在这里:get1.py

目标

给出下面的网站,把正文部分的图片全都获取下来:
https://zhuanlan.zhihu.com/p/109467098
然后保存在一个文件夹中.(随便找的测试用例哈,看着图片挺多的)

思路

先用requests库爬取网页,然后用bs4(BeautifulSoup解析库,后来被集成到bs4库了)解析,并分析内容获取每个图片链接,挨个下载,(最好开多线程,快)

准备

当然,先安装requests库和bs4库:

python -m pip install requests
python -m pip install bs4

然后试着导入一下,这里仅仅导入需用到的函数和类:

from requests import get
from bs4 import BeautifulSoup as bsp

另外,导入多线程库,提高抓取速度呢:

from threading import Thread

正式开始

首先主函数里面,先获取网页,当然带上自己浏览器的cookie,不然要么400要么403,就不好了
先模拟出一个请求头:

 headers = {"cookie":"SESSIONID=HrPazhGMeQ21VPmJbGUStdJ2p2jJ7hgPjP9vAgDNUWh; JOID=UVsQB0_UPoMFVldqBtNZ1NaAeRoU9xuhJnJ0TyTwHaYndXNJIy1SgWBRUW0Hi3lWnFUhd5eMx6OLpI1FOCVDNcs=; osd=VlAcBU7TNY8HV1BhCtFY092MexsT_BejJ3V_QybxGq0rd3JOKCFQgGdaXW8GjHJanlQmfJuOxqSAqI9EPy5PN8o=; __snaker__id=LTdZ3qzJ0jvvZf6q; _zap=b41c394c-877a-406e-a5b5-6e3cf5c4215a; _xsrf=eyiBe6zVtc4DBCNEXfgoE2DkmBnIQzs8; d_c0="AKAQ9NYpdxSPTsy0ahmjGoG3382YzBYFwiw=|1644374306"; r_cap_id="MWY3OGNkMTA3MGM1NGJkZTgyZmM5N2NhNDkwOTE0ODM=|1644374308|2a25282f9aaddebeec2988554f1359c7c5dbc62a"; cap_id="ZDMwOWRmYzcwMTJmNGY4Nzg2YWY3ZTExYzE3YzcyZGU=|1644374308|fa0d1761651393a4d579d6e940c4af3d66f14d31"; l_cap_id="Y2YwMTc1NDk4MzYyNDQ5MjgwNGU3YTY5N2Y2ZTJiM2Y=|1644374308|6de2520c201b745a432ee9f55f4c451d5136d415"; tst=r; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1644374308,1644380629,1644391422; NOT_UNREGISTER_WAITING=1; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1644392122; ariaDefaultTheme=undefined; KLBRSID=f48cb29c5180c5b0d91ded2e70103232|1644392121|1644391420; captcha_session_v2="2|1:0|10:1644392122|18:captcha_session_v2|88:MkgyaGxKSFBEazhNb0xycmZsZXgvdzVBYWV4VDlBRkwrM28ycTZiV21hZ0ZDNHh3YUtWd0Rjemk2dnFzbTBISg==|6138b9e4eee54bddde72613700e37617ff32075799a2f6c7dfc7f411ad22adc7"; gdxidpyhxdE=8C3lPvP8vKv08ri6Ho9vhcxvy/GLxS\pmlyI9WiGDZ0uJQjpch6PGUxIHi/0QcK6Hos00+fQhTzJtRwWb4iUZZaKi6fvRvw73sITJDxeUfOsI/7EnzxauS8+pJCZPi+mvLaxEk\WbabpvJ+oBx18iEmop\8tKj7T0ojzefrHgBDbQ/Qk:1644393024146; _9755xjdesxxd_=32; YD00517437729195:WM_NI=/FMTjcAithghrObdVhJGYca68ClJ8rqVV7FyA3NrFP3+HURvzlFBqUltziy1DcEHJYV7vfs/M5Re0dGv9le63jhyq5vNGhZYR4x0l4Mz7lWr9voiUF3jrUlasPbGsJDxcVk=; YD00517437729195:WM_NIKE=9ca17ae2e6ffcda170e2e6eeace47b90aba7a7e1458ab48ba6c14e939f8eafb6258990fe86c94997ec9d94c12af0fea7c3b92aed9a83b5e96983b7bc89e664b291ae85d5648a999784e43efc9da4abbb7ab38a9ad8c57383ed8293c55cf1f588b6d17ebab48aa3f45fb0acb68afc3b88bd8ba9c95396e9ba87f2258feb9e86b37085aaf78de83ef1b6a89af43fb6928989d95392ecb8d1ef408fa6f98dd67afbaaa18ad84ef1b6beb6ef6bb190aea8f24288a8adb7ea37e2a3; YD00517437729195:WM_TID=2tl0ALNhughBFQEQFUd7qfLieMXU5S8R","host":"zhuanlan.zhihu.com","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"}

然后,试着爬取一下并解析看看结果:

 res = get(url="https://zhuanlan.zhihu.com/p/109467098",headers=headers)html = bsp(res.text, "html.parser")print(html)

结果正常,虽然控制台乱七八糟…
根据浏览器的devtool,可以发现正文的所有图片都在如下框架中:

它的class属性是RichText ztext Post-RichText css-hnrfcf.那我们试着分离这个标签,然后再进行下一步.使用find_all('div', class_="RichText ztext Post-RichText css-hnrfcf")方法,并打印结果:

这不方便看清楚,那试着打印一下查找结果的__len__(),发现确实是1,说明仅存在这一个div,应该是保存正文用的.

进一步分析:图片都在img标签里,那是不是找到所有的img就够了?那么在刚刚的div查找结果里取索引[0]获得唯一的一个div,然后find_all img标签,并保存结果.
发现长度竟然有44!粗略数一下,应该不正确,我们要用的图片只有20多张.

那只能退而求其次,因为每个figure里只有一个img,保存的是图片,那么修改逻辑,最终如下:

 html = bsp(res.text, "html.parser")main_div = html.find_all("div",class_="RichText ztext Post-RichText css-hnrfcf")[0]imgs = [i.find_all("img")[0] for i in main_div.find_all("figure")]print(imgs.__len__())

ok,正好22张,跟数出来的一样.

下面迭代imgs获取链接属性,然后挨个下载就行啦,实现很简单直接贴代码了:

 for index, l in enumerate(links):Thread(target=lambda idx, lk:open("res/%d.jpg" % idx, "wb+") \.write(get(lk).content),args=(index, l)).start()

这里用了特别密集的代码书写形式,也许不能理解…总体来说,开启一个线程,执行"打开文件并写入内容,其中内容是网页上爬取的"的任务.然后启动这个线程,下一轮循环,把等待response的时间屏蔽掉,加速不少呢.

记得提前新建res/目录

全部代码及总结

完整代码如下:

from requests import get
from bs4 import BeautifulSoup as bsp
from threading import Threaddef main():headers = {"cookie":"SESSIONID=HrPazhGMeQ21VPmJbGUStdJ2p2jJ7hgPjP9vAgDNUWh; JOID=UVsQB0_UPoMFVldqBtNZ1NaAeRoU9xuhJnJ0TyTwHaYndXNJIy1SgWBRUW0Hi3lWnFUhd5eMx6OLpI1FOCVDNcs=; osd=VlAcBU7TNY8HV1BhCtFY092MexsT_BejJ3V_QybxGq0rd3JOKCFQgGdaXW8GjHJanlQmfJuOxqSAqI9EPy5PN8o=; __snaker__id=LTdZ3qzJ0jvvZf6q; _zap=b41c394c-877a-406e-a5b5-6e3cf5c4215a; _xsrf=eyiBe6zVtc4DBCNEXfgoE2DkmBnIQzs8; d_c0=\"AKAQ9NYpdxSPTsy0ahmjGoG3382YzBYFwiw=|1644374306\"; r_cap_id=\"MWY3OGNkMTA3MGM1NGJkZTgyZmM5N2NhNDkwOTE0ODM=|1644374308|2a25282f9aaddebeec2988554f1359c7c5dbc62a\"; cap_id=\"ZDMwOWRmYzcwMTJmNGY4Nzg2YWY3ZTExYzE3YzcyZGU=|1644374308|fa0d1761651393a4d579d6e940c4af3d66f14d31\"; l_cap_id=\"Y2YwMTc1NDk4MzYyNDQ5MjgwNGU3YTY5N2Y2ZTJiM2Y=|1644374308|6de2520c201b745a432ee9f55f4c451d5136d415\"; tst=r; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1644374308,1644380629,1644391422; NOT_UNREGISTER_WAITING=1; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1644392122; ariaDefaultTheme=undefined; KLBRSID=f48cb29c5180c5b0d91ded2e70103232|1644392121|1644391420; captcha_session_v2=\"2|1:0|10:1644392122|18:captcha_session_v2|88:MkgyaGxKSFBEazhNb0xycmZsZXgvdzVBYWV4VDlBRkwrM28ycTZiV21hZ0ZDNHh3YUtWd0Rjemk2dnFzbTBISg==|6138b9e4eee54bddde72613700e37617ff32075799a2f6c7dfc7f411ad22adc7\"; gdxidpyhxdE=8C3lPvP8vKv08ri6Ho9vhcxvy/GLxS\pmlyI9WiGDZ0uJQjpch6PGUxIHi/0QcK6Hos00+fQhTzJtRwWb4iUZZaKi6fvRvw73sITJDxeUfOsI/7EnzxauS8+pJCZPi+mvLaxEk\WbabpvJ+oBx18iEmop\8tKj7T0ojzefrHgBDbQ/Qk:1644393024146; _9755xjdesxxd_=32; YD00517437729195:WM_NI=/FMTjcAithghrObdVhJGYca68ClJ8rqVV7FyA3NrFP3+HURvzlFBqUltziy1DcEHJYV7vfs/M5Re0dGv9le63jhyq5vNGhZYR4x0l4Mz7lWr9voiUF3jrUlasPbGsJDxcVk=; YD00517437729195:WM_NIKE=9ca17ae2e6ffcda170e2e6eeace47b90aba7a7e1458ab48ba6c14e939f8eafb6258990fe86c94997ec9d94c12af0fea7c3b92aed9a83b5e96983b7bc89e664b291ae85d5648a999784e43efc9da4abbb7ab38a9ad8c57383ed8293c55cf1f588b6d17ebab48aa3f45fb0acb68afc3b88bd8ba9c95396e9ba87f2258feb9e86b37085aaf78de83ef1b6a89af43fb6928989d95392ecb8d1ef408fa6f98dd67afbaaa18ad84ef1b6beb6ef6bb190aea8f24288a8adb7ea37e2a3; YD00517437729195:WM_TID=2tl0ALNhughBFQEQFUd7qfLieMXU5S8R","host":"zhuanlan.zhihu.com","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"}res = get(url="https://zhuanlan.zhihu.com/p/109467098",headers=headers)html = bsp(res.text, "html.parser")main_div = html.find_all("div",class_="RichText ztext Post-RichText css-hnrfcf")[0]imgs = [i.find_all("img")[0] for i in main_div.find_all("figure")]# print(imgs.__len__())links = [i['src'] for i in imgs]# print(links)for index, l in enumerate(links):Thread(target=lambda idx, lk:open("res/%d.jpg" % idx, "wb+") \.write(get(lk).content),args=(index, l)).start()if __name__ == '__main__':main()

爬取多图片网页的方式
首先,用爬虫爬取整个网页,解析它
然后,根据具体情况用beautifulSoup获取需要的img(通常是)的src属性,也就是图片的真实储存地址
最后,看对效率的要求,如果必须很快的话建议用多线程, 遍历链接们并挨个下载.
成果:

记录爬取知识点中的图片相关推荐

  1. python爬取图片-Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 本地下载 我们这里以sogou作为爬取的对象. 首先 ...

  2. 八爪鱼 爬取微博中的图片到本地

    八爪鱼 爬取微博中的图片到本地 批量爬取大量的好看的图片 到自己的本地电脑  哈哈哈哈哈哈 抓取的微博图片 详细步骤:http://www.bazhuayu.com/tutorial/wbpiccj ...

  3. python爬虫网页中的图片_Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: 我们这里以sogou作为爬取的对象. 首先我们进入搜狗图片http://pic.s ...

  4. 用Python写一个网络爬虫爬取网页中的图片

    写一个爬虫爬取百度贴吧中一个帖子图片 网址:壁纸 用谷歌浏览器的开发工具检查网页,可以发现其每一张图片都有如下格式 <img class="BDE_Image" src=&q ...

  5. php抓取搜狗图片,Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: 我们这里以sogou作为爬取的对象. 首先我们进入搜狗图片http://pic.s ...

  6. python爬虫——爬取网页中的图片(正则表达式)

    爬取网站:站长之家 网址:辞旧迎新,字体超市携各品牌字体一起来送虎年祝福啦! # import requests import re import osif __name__ == '__main__ ...

  7. python爬图片显示不了_Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: 我们这里以sogou作为爬取的对象. 首先我们进入搜狗图片http://pic.s ...

  8. 爬取斗鱼中用户信息和图片

    爬取斗鱼中的内容时,分析页面发现,页面跳转时,url不会发生改变,所以,我们可以通过Fiddler抓取真正的网址 import scrapy import json from Douyu.items ...

  9. Python3爬取网页中图片(2021-01-04 14:06:02),附上完整代码

    Python爬取网页中图片,附上完整代码 文章目录 Python爬取网页中图片,附上完整代码 概述 完整代码 概述 批量爬取数据,请遵循robots协议及相关网站协议及说明. 本代码仅供有需要爬取网页 ...

最新文章

  1. 计算机知识指的是什么意思,计算机上面的m+和m-是什么意思
  2. HDU Problem 1272 小希的迷宫 【并查集】
  3. JavaScript放头部不执行的情况(针对新手)
  4. redis shutdown (error) ERR Errors trying to SHUTDOWN. Check logs.
  5. 3520a mmz错误解决方法
  6. unity vs没有智能提示_Unity博主营地你不可不知的Unity C#代码小技巧
  7. 03-es6语法 Promise 和 es8语法 async await 的了解和基本使用
  8. 路飞学城14天集训营作业2—三级菜单
  9. 计算机表格中需要乘法求和,《怎么在Excel表格里面使用乘法求和》
  10. php7会不会出问题,升级到PHP7后会话不工作
  11. 一步一步重构柔性数组和智能指针
  12. cve-2017-0199metasploit复现过程
  13. Multisim14.0详细安装教程图文
  14. 【C语言】数组名地址与数组首元素地址区别(实例分析)
  15. 0ctf Babyheap 2017
  16. Python自然语言处理 3 处理原始文本
  17. 计算机内存怎样清理,怎么样清理电脑内存 电脑清理内存方法【图文】
  18. Vue源码阅读(28):mergeOptions() 方法源码解析
  19. 在新的固态硬盘中安装windows系统(旧固态硬盘已安装ubuntu系统)
  20. 【总结】1268- 几个前端代码部署的灵魂拷问

热门文章

  1. xposed下载出错 http://dl.xposed.info/repo
  2. 迅捷PDF转换器(app.xunjiepdf.com)
  3. final、finally的区别和用法
  4. 【工控软件 博图(博途)Portal西门子】体系 概述 思维导图
  5. 【Qt入门第13篇】 2D绘图(三)绘制文字
  6. rust 实现 rCore lab1
  7. 对傅里叶级数和傅里叶变换的理解
  8. Recuva破解版|recuva恢复工具破解免费版下载
  9. java文章管理系统源码_融成Java后台网站内容管理系统 v3.2.1
  10. 遥感影像出现nan如何处理、envi主成分分析nan报错处理