国家航天局图片采集

声明: 本文档只做案例演示, 程序运行设置有时间间隔.

分析目标网站结构

本次爬取的网站是国家航天局

我们的目标是下载该网站精彩图集中的图片.



每页和图片详情页URL的分析

通过观察我们可以发现, 精彩图集页面下, 一共有14页, 每页都包含了相关的图片. 点击这些图片我们能进入到图片详情页, 详情页中包含了目标图片和图片标题.



既然能通过点击对应图片进入到图片详情页, 说明当前页面中包含了图片详情页的URL.

精彩图集中一共14页, 说明我们需要爬取14个页面中的图片详情页URL.

通过分析网站发现, 精彩图集中点击进入下一页, 或者点击第二页, 第三页. 浏览器上方的网址(URL)并没有发生变化, 但是实际在换页的时候, 页面上的图片是会发送变化的. 根据这个现象可以猜测网站在进入下一页或其他页面时会发送额外的请求来获取页面上需要呈现的图片数据, 如ajax请求.

打开浏览器的开发者工具, 在network中对请求进行简单抓包分析, 发现进入下一页的时候会有额外请求的发送, 而这些额外请求返回的响应中包含了图片的详情页链接


我们可以看到这些请求返回的数据是一堆html代码, 而这些代码中包含了a标签, 标签中href属性的值就是图片详情页的URL, 当然这个URL是残缺的, 我们需要进行相关的拼接, 因为实际的详情页URL一般是这样的: http://www.cnsa.gov.cn/n6758823/n6758842/c6769934/content.html

既然图片详情页的URL就在这些请求返回的响应中, 那么也就是说我们模拟这些请求来获取响应即可, 从响应中提取我们要的数据.

详情页URL搞定了, 我们要想一想整个精彩图集的每一页应该怎么爬取, 虽然我们肉眼直观的能看到是14页, 我们可以循环来发送刚才我们抓到的额外请求, 但是网站是会更新的, 一段时间后可能就不是14页. 我们要想个办法, 让程序自己在爬取的时候知道总页数是多少, 这样任何时候总页数都是正确的, 那么我们在爬取每一页的时候就不容易出错.

在查看 精彩图集网页源代码的时候, 发现html代码中包含了一段js代码, 里面定义了总页数的变量.


显然maxPageNum = 14;这里变量的值就是我们想要的总页数, 我们可以通过访问该页面, 使用正则来匹配该变量值获取总页数.

总结: 分析到这里, 我们解决了爬取图片的两个问题.

发现额外发送的请求中包含了图片的URL, 可以通过让程序发送这些请求来获取图片URL.

从精彩图集首页中的源代码中发现总页数的数据所在位置, 通过正则可以来提取总页数.

这样我们离下载图片还差访问详情页和访问页中的图片URL了.

图片详情页分析


通过浏览器开发者工具, 我们能轻易的查看到图片URL所在网页代码中的位置, 我们发现图片URL就在img标签中, 大致的层次结构如图, 现在的话我们就打开网页源代码, 看下网页源代码中是否也能直接找到这样的URL.


显然我们直接就找到了, 那么我们的图片URL找到了, 而且我们图片的标题也是能在源代码中找到的.

所以总结: 到目前为止, 我们整个网站分析就结束了.

图集总页数的数据获取

图集每一页的请求的抓取, 详情页URL的确定.

详情页中图片URL和图片标题的确定.

接下来就剩写代码了.

代码编写


首先创建demo3目录, 在该目录下创建images目录和pa_china_sa.py文件.

该py文件中存放我们的爬虫代码.

我们分段处理问题来写代码

每一页请求的发送

代码需要安装导入并使用requests模块: pip install requests

这里的主要逻辑为:

访问图集首页


通过正则获取总页数.


通过总页数和构造每页URL再配合使用for循环, 来发送每页的请求



图片详情页的提取

代码需要安装导入并使用lxml模块: pip install lxml

lxml模块包含了支持xpath表达式的功能, 可以通过该模块配合xpath来提取结构化的数据即详情页URL

主要逻辑为:

根据每页返回响应数据, 创建支持xpath的对象, 并提取URL.


对提取的数据进行请求.



从图片详情页中提取图片URL

主要逻辑为:

    通过xpath从循环请求详情页的响应中抽取图片URL和图片标题.


通过列表的追加方法, 将图片的URL和名称放入到列表中.


下载图片并保存到images目录下


代码可以封装到函数中, 使用上多线程来提高下载效率.

from multiprocessing.pool import ThreadPool

执行结果如下:


有问题欢迎留言评论.有建议或者意见欢迎斧正 不胜感激

有兴趣一起学习爬虫的小伙伴们记得加群: 657598389,会有许多的资源可以供大家学习分享,欢迎大家前来一起学习进步!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,924评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,781评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,813评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,264评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,273评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,383评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,800评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,482评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,673评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,497评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,545评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,240评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,802评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,866评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,101评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,673评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,245评论 2 341