今天我们要爬取的仍然是图片,不过与上一篇有所不一样的是,今天爬取的是今日头条上的图集,接着往下看吧~

运行平台:Windows

Python版本:Python3.6

IDE: Sublime Text Python自带IDLE

其他:Chrome浏览器

简述流程为:

步骤1:了解Ajax加载并使用开发者工具找到Ajax加载的数据

步骤2:从网页中获取相关信息

步骤3:解析json信息

步骤4:爬取图片并保存(利用多进程加速)

我们在浏览网页时经常会碰到这样一种情况,原始网页只显示一部分数据,需要手动下拉进度条才会加载出更多内容.并且这种情况下页面链接不改变,现在有很多网页都是使用这种方式呈现数据。这种加载页面的方式其实就是Ajax加载。Ajax加载和我们之前爬取的网页有何不同呢?最大的不同便是我们在浏览器上可以看到的正常显示的数据,却不能被requests给抓取到,所以今天我们需要了解一下怎样应对Ajax的分析与数据采集。

同样我们需要借助Chrome浏览器,我们先来通过浏览器来看一下Ajax加载的实例。今天要爬取的是今日头条的图片,所以我们以今日头条的官网演示,其实还有很多网站是这样加载的,比如微博、空间等。

我们打开今日头条网页,输入街头篮球搜索,然后点击图集,你会看到一系列图集,然后将进度条下拉,内容不断增多,但网页链接却没有改变。我们通过开发者工具来看一下加载过程,按下F12+F5,找到xhr,在我们不断下拉的时候,会发现xhr中的条目逐渐增加,我们点开其中一个

展开data字段,我们便可以看到许多数据,而其中的title正好对应了浏览器上显示的标题,检查其他浏览器上显示的,会发现可以一一对应到,于是我们便找到了这些由Ajax加载的数据,右键查看一下。哈哈哈,再一次展示了JSONView的强大。

接下来我们便可以开始用代码实现了。

首先还是将网页HTML文本爬取下来吧

这里为了方便截图,将函数的文档字符串给删除了,这里文档字符串也就是“获取网页HTML文本并返回结果”。我们主要看一下paras这个字典,这是怎么来的呢?实际上这就是从开发者工具中看到的,也是用来请求URL的各种参数,offset、format等每个参数代表的意思我已经在注释中标明了。

这里的offset为0,表示为加载的第一页,继续下拉会发现,offset以20为等差递增,keyword为我们搜素的关键词,函数中我们将这两个参数以变量形式赋值,便于我们获取到其他更多内容。我们在这里会遇到一个小小的麻烦,就是在将这些请求参数复制下来的时候,需要我们自己去调整成字典的格式,如果一个冒号,引号的加上去也不是不可以,只是显得有些麻烦,我们可以使用编辑器中提供的替换功能。

这里使用的是正则匹配替换,切换正则匹配模式后按下 Replace All便可以将其转换成我们所需要的格式了。

构建网页链接的时候我们使用了urllib.parse库中的urlencode函数,这是将我们所匹配出来的key-value格式的键值对转换成网页所需要的格式,返回的一般是a=1&b=2&c=3这样的字符串,比如说:

我们会发现在浏览器中显示网页链接中的的中文会变成一串看不懂的编码,这其实就是urlencode能够完成的。通过一个简单的例子看一下。

我们可以先将爬取下来的结果打印出来,然后使用在线json解析工具对比一下,便可以发现我们爬取的文本是否正确了。

接下来便是解析文本,提取我们想要的信息了。

这里我们先使用json.loads将HTML文本解析成json格式。这里只是将索引页中显示的标题和图片爬取出来,并没有爬取所有的图片。如果需要爬取所有图片的话,我们需要先获取所有详情页的URL,然后在详情页中使用正则表达式获取所有图片信息,这里就不再叙述了。

因为只是获取标题栏下的图片,所以我们可以对图片链接中的/list/进行替换,使得我们爬取到的图片是大图,而不是标题栏下的那些小图。

同样是将图片存储到文件中,与上一篇一样,创建文件夹并转到文件夹目录中,不过使用标题作为文件名的话,会出现重名,所以我在每个文件后使用数字标明,用于区分。

最后就是传入offset和keyword参数了,这里我只输出第一页的内容。

由于每一张图片存储过后我都休息了两秒,所以即使只爬取一页内容,最后用时也很长,所以我们可以采用多进程的方式,减少用时。

这里我们使用的是Pool类中的map方法,它与内置的map函数方法用法基本一致,它可以使得进程阻塞直到返回结果。 也就是说,当我运行上面这段代码时,它不会像for循环一样,“存储成功”的字眼一个一个输出,而是在程序结束之前一起输出结果。

时间变少了,当然由于街头篮球的图集数量不多,这一次我们也只爬取了24项内容,但速度相对于之前依然快了不少,不要忘了,我们爬取一张图片可都休息了2秒,所以这个速度还是提升了不少的。

最后看下爬取的成果吧。

python爬取头条图集_Python爬虫基础练习(六) 今日头条街头篮球图片爬取相关推荐

  1. python爬取空气质量指标_python爬虫之静态网页——全国空气质量指数(AQI)爬取

    首先爬取地址:http://www.air-level.com/ 利用的python库,最近最流行的requests,BeautifulSoup. requests:用于下载html Beautifu ...

  2. python爬空气污染实时数据_python爬虫之静态网页——全国空气质量指数(AQI)爬取...

    利用的python库,最近最流行的requests,BeautifulSoup. requests:用于下载html BeautifulSoup:用于解析 下面开始分析:要获取所有城市的aqi,就要进 ...

  3. python爬虫知乎图片_Python爬虫入门教程 25-100 知乎文章图片爬取器之一

    1. 知乎文章图片爬取器之一写在前面 今天开始尝试爬取一下知乎,看一下这个网站都有什么好玩的内容可以爬取到,可能断断续续会写几篇文章,今天首先爬取最简单的,单一文章的所有回答,爬取这个没有什么难度. ...

  4. python爬视频网站数据_python爬虫基础应用----爬取无反爬视频网站

    一.爬虫简单介绍 爬虫是什么? 爬虫是首先使用模拟浏览器访问网站获取数据,然后通过解析过滤获得有价值的信息,最后保存到到自己库中的程序. 爬虫程序包括哪些模块? python中的爬虫程序主要包括,re ...

  5. python发短信 金山_Python爬虫基础练习(四) 金山翻译爬取(进阶篇)

    上一篇文章金山翻译爬取(基础篇)讲到爬取金山翻译,并且实现了简单词汇的爬取,但是我们的报错信息都是一长串字符,就像这样 当然这个报错还是很容易看懂的,"列表索引超出范围",但是我们 ...

  6. python爬去朋友圈_python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

    昨天小帅b看到一些事情不顺眼 有人偷换概念 忍不住就写了一篇反讽 996 的 没想到有些人看不懂 这就算了 还来骂我 早些时候关注我的小伙伴应该知道我第一时间就发过反对 996 的文章 哎- 不过也好 ...

  7. python代码html显示数据_Python爬虫基础之认识html和学习数据提取(上)

    我:我已经学会了基本的python,接下来可以学什么鸭? 惨绿青年:接下来可以学习制作python爬虫了,但还是需要学习相关的知识. 我:什么知识鸭? 惨绿青年:网页的相关知识.我们看到的网页一般是h ...

  8. python win32ui选取文件夹_Python爬虫基础之认识html和学习数据提取(上)

    我:我已经学会了基本的python,接下来可以学什么鸭? 惨绿青年:接下来可以学习制作python爬虫了,但还是需要学习相关的知识. 我:什么知识鸭? 惨绿青年:网页的相关知识.我们看到的网页一般是h ...

  9. 今日头条的排名算法_今日头条搜索seo排名怎么做? 今日头条搜索排名规则...

    今日 既然今日头条宣布做搜索引擎,怎么少的了"头条seo"的研究呢? 一."头条seo"是什么? 头条seo指的是在今日头条app上用关键词搜索结果排名靠前.头 ...

最新文章

  1. 程序员,唯有锻炼与读书不能辜负
  2. 记一次对某企业的渗透测试实战
  3. securecrt哪个版本好用_电脑跑分测试软件哪个好?好用的电脑跑分软件推荐
  4. 3ds Max制作碗实例教程
  5. es6判断对象key是否存在,ES6中获取对象的key
  6. 我们就要想办法的s9t9
  7. 数据结构中三表合一的实现
  8. 大IP天官赐福要拍剧啦,想要手机壁纸图片先来一波!
  9. 9.6.1 三维数据可视化之散点图
  10. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_1_函数式接口的概念函数式接口的定义...
  11. SQL:取 分组后 的 按时间倒序 的前5条数据
  12. web显示csv_10 种最流行的 Web 挖掘工具!
  13. 比Python爬虫简单的爬虫方法1-后羿采集器
  14. Python画皮卡丘(自创)
  15. 如何用php农场项目,2020全新亲测php农场游戏源码-金币菇种植理财区块链源码 带商城系统...
  16. NPOI实现Word插入段落
  17. 计算机专业本科生和研究生比较
  18. 关于ARM指令的英文全称(方便记忆|巧记汇编指令)
  19. 软件测试工程师的发展道路
  20. HTML页面结构了解

热门文章

  1. 如何使用heic图片转换精灵,将heic转成JPG
  2. 《笨方法学习python3》练习16: Reading and Writing Files: write, seek, readline, truncate, open
  3. freeswitch录音
  4. PTA 10-98 3-1-(a) 查询电影“M3”中的男影星
  5. 家用计算机是数模混合,计算机可分为哪几类?依据是什么?
  6. mac 新建窗口时出现两种风格问题(oh-my-zsh配置后)
  7. 怎么将文字转语音真人发声?不会的小伙伴来看这个方法
  8. 谷歌「我不是机器人」按钮隐藏了,但你的隐私暴露了
  9. fd_set与select
  10. 在线生成广西geojson数据+精确到乡镇街道级别手绘地图json