澎湃网文章的质量不错,它的"美数课"栏目的信息图做得也很好。图片干货多还能带来ppt和图表制作的技巧。为了更方便浏览所有文章图片,通过分析Ajax爬取栏目至今所有信息图的图片。

但是当爬取多页时,难度会增加,同时,前几篇爬虫文章中的网站有一个明显的特点是:可以通过点击鼠标实现网页的翻页,并且url会发生相应的变化。除了此类网站以外,还有一类非常常见的网站特点是:没有"下一页"这样的按钮,而是"加载更多"或者会不断自动刷新从而呈现出更多的内容,同时网页url也不发生变化。这种类型的网页通常采用的是Ajax技术,要抓取其中的网页内容需要采取一定的技巧。本文以信息图做得非常棒的澎湃"美数课"为例,抓取该栏目至今所有文章的图片。

栏目网址:https://www.thepaper.cn/list_25635

本文知识点:

Ajax知识

多页图片爬取

1. Ajax知识

在该主页上尝试不断下拉,会发现网页不断地加载出新的文章内容来,而并不需要通过点击"下一页"来实现,而且网址url也保持不变。也就是说在同一个网页中通过下拉源源不断地刷新出了网页内容。这种形式的网页在今天非常常见,它们普遍是采用了Ajax技术。

Ajax 全称是 Asynchronous JavaScript and XML(异步 JavaScript 和 XML)。

它不是一门编程语言,而是利用 JavaScript 在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。

Ajax更多参考:

https://germey.gitbooks.io/python3webspider/content/6.2-Ajax%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95.html

采用了Ajax的网页和普通的网页有一定的区别,普通网页的爬虫代码放在这种类型的网页上就行不通了,必须另辟出路。下面我们就来尝试一下如何爬取网易"数读"所有的文章。

主页,然后按刷新,会弹出很多链接文件。鼠标上拉回到第一个文件:list_25635,在右侧按搜索一下第一篇文章的标题:"娃娃机生意经",可以看到在html网页中找到了对应的源代码。

接着,我们拖动下拉鼠标,显示出更多文章。然后再次搜索一篇文章的标题:"金砖峰会",会发现搜不到相应的内容了。是不是感觉很奇怪?

其实,这里就是用了Ajax的技术,和普通网页翻页是刷新整个网页不同,这种类型网页可以再保持url不变的前提下只刷新部分内容。这就为我们进行爬虫带来了麻烦。因为,我们通过解析网页的url:只能爬取前面部分的内容而后面通过下拉刷新出来的内容是爬取不到的。这显然不完美,那么怎么才能够爬取到后面不断刷新出来的网页内容呢?

2. url分析

我们把右侧的选项卡从切换到,然后按再次按刷新,可以发现列有4个结果。选择第3个链接打开并点击,通过滑动可以看到一些文本内容和网页中的文章标题是一一对应的。比如第一个是:娃娃机生意经|有没有好奇过抓娃娃机怎么又重新火起来了?,一直往下拖拽可以看到有很多篇文章。此时,再切换到headers选项卡,复制后面的链接并打开,会显示一部分文章的标题和图片内容。数一下的话,可以发现一共有20个文章标题,也就是对应着20篇文章。

这个链接其实和上面的list_25635链接的内容是一致的。这样看来,好像发现不了什么东西,不过不要着急。

这说明了什么呢?说明这篇文章的内容不在第一个list_25635链接中,而在这个的链接里。鼠标点击,复制后面的链接并打开,就可以再次看到包括这篇文章在内的新的20篇文章。

是不是发现了点了什么?接着,我们继续下拉,会发现弹出更多的的链接。再搜索一个标题:,可以发现在网页中也同样找到了文章标题。

回到我们的初衷:下载所有网页的图片内容。那么现在就有解决办法礼:一个个地把出现的这些url网址中图片下载下来就大功告成了。

好,我们先来分析一下这些url,看看有没有相似性,如果有很明显的相似性,那么就可以像普通网页那样,通过构造翻页页数的url,实现for循环就可以批量下载所有网页的图片了。复制前3个链接如下:

发现键的值呈现规律的数字递增变化,看起来是个好消息。但同时发现后面的lastTime键的值看起来是随机变化的,这个有没有影响呢? 来测试一下,复制第一个链接,删掉这一串字符,会发现网页一样能够正常打开,就说明着一对参数不影响网页内容,那就太好了。我们可以删除掉,这样所有url的区别只剩的值了,这时就可以构造url来实现for循环了。构造的url形式如下:

同时,尝试把数字2改成1并打开链接看看会有什么变化,发现呈现的内容就是第1页的内容。这样,我们就可以从第一页开始构造url循环了。

既然确定了首页,那么也要相应地确定一下尾页。很简单,我们把数字改大然后打开链接看是否有内容即可。比如改为**10 **,打开发现有内容显示,很好。接着,再改为30,发现没有内容了。说明该栏目的页数介于这两个数之间,尝试几次后,发现是最后一个有内容的网页,也意味着能够爬取的页数一共是25页。

确定了首页和尾页后,下面我们就可以开始构造链接,先爬取第一篇文章网页里的图片(这个爬取过程,我们上一篇爬取网易"数读"已经尝试过了),然后爬取这一整页的图片,最后循环25页,爬取所有图片,下面开始吧。

3. 程序代码

结果:

文章代码和栏目从2015年至今437篇文章共1509张图片资源,可在下方链接中得到:https://github.com/makcyun/web_scraping_with_python

本文完。

爬虫python下载网站所有图片_python爬虫(4):多页图片批量下载-澎湃网信息图...相关推荐

  1. 爬虫python下载网站所有图片_Python爬虫之下载网页图片

    传统的方式是在想要的图片上鼠标点击右键另存为,或者用截图的方式保存图片,其实我们还可以通过使用简单的Python语言实现图片的下载并保存到本地,下面让我们看看如何实现吧 一.确定图片的URL地址及获取 ...

  2. python获取网站代码_python爬虫1——获取网站源代码(豆瓣图书top250信息)

    # -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...

  3. 爬虫python可以干嘛_python爬虫可以用来做什么?

    1.收集数据 python爬虫程序可用于收集数据.这也是最直接和最常用的方法.由于爬虫程序是一个程序,程序运行得非常快,不会因为重复的事情而感到疲倦,因此使用爬虫程序获取大量数据变得非常简单和快速. ...

  4. python批量下载文件教程_Python抓包菜鸟教程:批量下载图片的方法,电脑和手机都能用...

    笔者看上了一组图集,然后准备一张一张下载时,瞄了一眼,这组图集还有100+,好吧,我酸了. 笔者就是试试工具,你们别像我这样用,这么好的工具,做自媒体,那绝对了 那如何批量下载几百张图片呢?教程开始了 ...

  5. java图片下载工具_Java实现的有道云笔记图片批量下载工具

    有朋友问我每天哪里找时间写这么多文章. 作为一个程序员,当然要善于利用各种工具提高自己做事情的效率了.如果没有现成的工具,就得自己造. 我写文章一般是在云笔记里编辑,完成之后直接复制粘贴到自媒体平台. ...

  6. 爬虫python教程百度云_Python爬虫比较基础的教程视频百度云网盘下载

    Python爬虫比较基础的教程视频百度云网盘下载,目录如下,给编程的朋友学习吧,请大家支持正版! QQ截图20180719110859.jpg (12.41 KB, 下载次数: 27) 2018-7- ...

  7. python 爬网站 实例_python爬虫实战:之爬取京东商城实例教程!(含源代码)

    前言: 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1 ...

  8. 爬虫python需要哪些软件_Python爬虫可以应用在哪些地方

    Python爬虫可以应用在哪些地方 发布时间:2020-06-19 14:46:48 来源:亿速云 阅读:118 作者:元一 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页 ...

  9. 分享一款非常好用的Fatkun图片批量下载工具

    Fatkun图片批量下载 相信大家一定遇到过有着大量精美图片的网页,譬如美女照片.各种壁纸.设计素材.甚至是1024套图等等,但常常几十上百张的图要一张张手工去点击下载实在能让人抓狂!小编的工作中也常 ...

最新文章

  1. 使用Markdown写作
  2. influx测试——单条读性能很差,大约400条/s,批量写性能很高,7万条/s,总体说来适合IOT数据批量存,根据tag查和过滤场景,按照时间顺序返回...
  3. Log4j输出格式控制--log4j的PatternLayout参数含义
  4. CV:人工智能之计算机视觉方向的简介(CV发展史+常用数据集+CV职位)、传统方法对比CNN类算法、计算机视觉十大应用(知识导图+经典案例)之详细攻略
  5. *CI框架装载器Loader.php源码分析
  6. chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver
  7. react不同环境不同配置angular_叫雨山斗鸡优势在哪里,环境不同,价值不同
  8. java拷贝文件目录结构_Java如何复制目录_Java基础教程系列
  9. 成本预算的四个步骤_工业企业成本管理之成本控制体系的构建
  10. Java -- Thread中start和run方法的区别
  11. 软件技术基础复习提纲
  12. [教程]黑莓终极中文混刷教程 终身受用
  13. javascript运算符——条件、逗号、赋值、()和void运算符 (转载)
  14. 究竟什么是冯诺依曼瓶颈(von Neumann Bottleneck)?
  15. 短信API整合在spring里面(3)
  16. 计算机有哪些知识,电脑基本操作知识有哪些
  17. Linux学习之Kali制作简单的Windows的木马,创建后门
  18. 【英文】Node.js Streams: Everything you need to know //转载
  19. PDF加密工具有哪些?有免费的吗?
  20. 约旦稳居B组头名 澳大利亚绝杀叙利亚出线

热门文章

  1. 数据库 创建数据库 创建表 删除表 添加属性 删除属性 插入数据
  2. 基于机智云物联网平台的智能种树小车
  3. 10亿行C ++代码使用3万元/个的电脑处理器AMD Threadripper 3990X:在64核CPU处理器256GB内存电脑上编译需要多长时间?
  4. Educational Codeforces Round 33 (Rated for Div. 2) B题
  5. 计算机机房联合接地线用什么线,弱电机房60平米,现在铺静电地板需要接地,那么接接地线用多大的求解答...
  6. 惩罚项的意义-为什么有惩罚项?
  7. 征信有逾期,还能贷到款?
  8. python heapq模块查找集合中最大或最小n个元素列表
  9. 十种人不适合做管理者
  10. 使用CAsyncSocket类进行网络编程