Python爬虫进阶之Scrapy

news/2024/7/19 11:51:44 标签: 爬虫, python, scrapy

用Scrapy爬取百度图片

前段时间用python的requests库和BeautifulSoup库爬取了猫眼电影关于柯南剧场版的6000条评论
这次我们来使用Scrapy框架来实现爬虫任务——百度“唯美图片”的爬取

整个项目的工程源码我已经上传到GitHub上了,感兴趣的同学可以自行下载,能顺便给我的项目一个star那再好不过了

点击该链接跳转至项目地址

先展示下我们爬取的结果

看着爬取下来的这一张一张的图,内心的满满的成就感有没有,哈哈,那接下来就跟着我一起来看看如何去实现图片的爬取吧

一、准备工作

    我们此次用到的工具有:

  • python3.7.3
  • PyCharm5.0.3
  • Scrapy1.7.4

    没有安装scrapy的直接在命令行里pip install scrapy安装scrapy框架,在windows环境下安装scrapy开始会报错,这是因为安装scrapy要安装其它的一些依赖库,lxml、pyOpenSSL、Twisted 、pywin32。安装好这些库之后,再去安装scrapy就不会报错了。安装完成之后我们在命令行里输入scrapy看是否安装成功,结果如下:

    然后我们开始创建Scrapy项目,在命令行输入:

python">scrapy startproject XXX

    其中XXX表示的是你的项目名称,在这里我取名为images

    然后用PyCharm打开这个项目文件夹,发现其目录结构如下:

  1. scrapy.cfg: 项目的配置文件,现在可以先忽略。
  2. images/: 该项目的python模块。
  3. images/items.py: 项目中的item文件。

    item是爬取之后保存数据的容器,其用法类似于python里的字典。这些文件可以先不用管,等我之后用到的时候会给大家讲解的。

二、网页数据分析

    打开百度图片的网页搜索唯美图片

    进入搜索结果之后,打开开发者模式,我发现这里面的图片数据全部都是动态加载的,这个时候就不能用平常的获取网页结构的方式来获取我们需要的数据了。这个时候我在过滤栏输入json,看一下是不是有相应的json数据传输。

    果不其然,让我发现了对应的json数据,我们打开一个json数据来看一下,里面是否有我们想要的图片的url地址,果然找到了

    那接下来我们就来分析下这个请求json数据的链接的规律,我选取三个json数据的链接,将他们放在一起比对,我们发现只有几个参数不同,其它的都相同,不同的几个参数是pn和gsm而rn都是30,而且gsm分别是1571723763553、1571723763651、1571723766127,根据爬虫老司机的经验,gsm表示的是当前的时间,只不过这里用了毫秒表示,然后pn表示的是这个json数据里最后一张图片的索引信息,rn表示的是每一个json数据里代有图片信息的条数


    做完了以上的工作之后接下来就好办了,我们的思路就是构造请求json数据的url,然后我们通过scrapy框架请求将请求的数据转换成json格式,之后我们通过key,value的形式以及循环来获取图片的url,然后利用我们的框架获取图片将其保存在指定的目录下。

三、编写代码

    首先,我们在spiders目录下建立一个叫做images_spider的文件。这个时候得提到我们的scrapy框架了,我们的scrapy框架里有一个爬虫的抽象类,我们要在spiders目录下建立相对应的文件,并在里面实现对这个类的继承,从而实现爬虫

    然后我们在这个类里面重写parse方法,这个parse方法在我们这个项目中是用来获取我们的图片链接并将其保存在item里面。然后我们再去重写我们的pipelines.py里面的那个类,那个类是用来处理获取图片链接之后将其保存在我们指定的目录里面。

四、注意事项

    在用scrapy框架进行爬虫的时候,一定要更改settings.py的ROBOTSTXT_OBEY,settings.py文件里默认是True的也就是说遵循robots协议,而百度的robots.txt文件里默认是不允许被爬虫的,所以你如果不改这里是无法爬取到百度的数据的。

python">ROBOTSTXT_OBEY = False

五、改进

    之前我们是在代码里将要搜索的关键字写在了里面,这样之后我们要爬取另外一种类型的图片的时候又要去代码中修改,这样十分的的不方便,于是我做了一点点修改,当程序运行的时候,读取用户输入的关键字,之后根据用户输入放入关键字来进行图片的爬取。这样我们就能够爬取各种各样的图片了,比如说我输入关键字:张天爱高清壁纸
在这里插入图片描述

温馨提示:爬虫要在法律允许的条件下进行

相关文章推荐

  • 《用Python爬取猫眼电影里柯南剧场版的6000条评论》
  • 《用python爬取笔趣阁小说》
  • 《十大经典排序算法之快速排序》

感谢阅读,各位看官点个赞呗


http://www.niftyadmin.cn/n/625602.html

相关文章

力扣刷题第一弹之《两数之和》

力扣刷题第一弹之《两数之和》 力扣,名字来源为LeetCode的音译,意思是我们一起来编程吧。这是一个全球极客挚爱的高质量技术成长平台,里面有超过1450道题目资源以及相关公司的面试真题、其中包括腾讯、阿里、百度、美团、字节跳动等公司的笔试…

Win10系统下安装Mysql8.0

Win10系统下安装Mysql8.0 一、Mysql介绍 ​ MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relationa…

RESTFul 风格的API

一、什么是RESTFul RESTful是基于http方法的API设计风格而不是一种技术。可以说使用这种设计风格我们看到url就知道要什么样的资源、看到http method就知道要针对资源干什么、看到http的 status code就知道结果是什么。使用RESTFul风格的api规范了程序员的代码开发&#xff0c…

基于SpringBoot开发的RESTFul风格的API

上次我们讲到前后端开发的时候要以RESTFul风格的API进行开发,这样减少了前后端交流的口舌,所以我们就来实战一下,写一个以RESTFul风格的开发的API 一、前提准备 IEDAMysql-8.0.18Navigator 二、数据库的建立 ​ 首先建立一个叫做RESTFulDe…

解决微信小程序页面间传递JSON数据导致的问题

问题背景:笔者要在微信小程序的a页面传递a页面的json数据给b页面,但是却在传递数据的过程中出了问题 a页面的dataList存的json数据,数据如下 {"nb":"ok:ok","detail":[{"age":18},{"age"…

VS2019或者VS2017创建ASP.NET项目

最近在学.NET Web应用程序开发,做个记录。默认大家的本机的IIS服务已经搭建好了,没有搭建好的自行百度 文章目录首先是VS的相关配置然后是项目的创建发布网站(项目的发布)IIS配置首先是VS的相关配置 首先打开VS2019(博…

网桥、交换机、路由器等的区别

网桥、路由器、交换机、集线器、网关的区别 最近在复习计算机网络,里面有一些概念搞不清楚,所以今天写下来做个记录。 集线器 ​ 集线器的主要功能是对接受到的信号进行再生整形放大,以扩大网络的传输距离,主要工作在 OSI 参考模…

LeetCode 每日一刷【79】单词搜索

​ 话不多说,直接上题目链接,79.单词搜索 。题目描述如下: 题目思路 ​ 这是一道典型的 DFS (深度优先搜索)的题目,深度优先搜索的精髓就是递归,从某个节点开始遍历其邻近的节点&#…