我与Scrapy的初次相识,理论+实战入门Scrapy

和Scrapy接触不久,做一个项目学习并记录一下,这个代码倒是写了有段时间了,一直没来写博客,这爬虫集合的更新也耽误好久了。随着疫情的好转,我这也恢复正常写博文(糊脸,疫情不是自己不写博文的理由),大家一起加油呀,加油加油,一起都已经好起来了。
实战项目是爬取简书网(https://www.jianshu.com/) 二级页面信息的Scrapy项目,这也就个入门,大佬看见了一定请指点一下。

一、我对Scrapy的一些浅显的理解

Scrapy就是个爬虫框架,它像个房子的钢筋混凝土框架一样,使得我们可以在这个框架里自由发挥,我们只需要在该安装“门”的地方装上“门”(做填空一样),接下来就可以打开爬虫的大门了,十分的便捷。

我这些浅显的话还是要搭一些科普,不然就太没营养了,我从百*百科cv大法了这个图,下面就我的理解解释一下这图中五大部件:Scrapy Engine(引擎)、Scheduler(调度器)、Downloader(下载器)、Spider(爬虫)、Item Pipeline(管道),及两个中间件:Downloader Middlewares(下载中间件)、Spider Middlewares(爬虫中间件)。
在这里插入图片描述

1.1、五大部件

Scrapy Engine(引擎):顾名思义,看到引擎,我就想到了汽车的发动机,这肯定是一个十分十分重要的东西。引擎关联着其他的所有部件,从图里也看出,引擎起到一个信号塔的作用,传递着各部件之间的信息、数据等。

Scheduler(调度器):调度器调度器,调度两个字尤其突出,那我们可以想到调度些什么呢?调度爬虫下载的请求,它会将从引擎传来的请求加入队列当中,当引擎需要的时候再给回引擎。

Downloader(下载器):下载器,啊哈,简单,就是下载网页嘛,不就是爬虫了嘛,错错错,这个下载器不是爬虫,Scrapy分工十分明确的。下载器是按照引擎给的网页请求,下载网页的内容然后返回给引擎,由引擎交给爬虫,它就专门下载网页,也是后面Spider代码里面的response的由来。

Spider(爬虫):这里就比较熟悉了,自己编写爬虫逻辑,进行网页的解析跳转等等操作,我们使用Scrapy绝大功夫都在这里了。

Item Pipeline(管道):这个啊,就是对Spider获取到的数据进行一些处理,包括(清洗,过滤,储存等等)。

1.2、两个中间件

Downloader Middlewares(下载中间件):可以在这里设置下载的请求头,下载的时间间隔,代理等等操作,在一定程度上使Spider更加纯粹了。

Spider Middlewares(爬虫中间件):看图它位于引擎和spider之间,而经由这条线路上的是request请求和response请求的返回还有items爬取结果(就那三根绿线),这个中间件意味可以自己定义扩展request、response和items。

1.3、项目简说

前面讲的五大部件,两个中间件都太理论了,感觉Scrapy离我们还是有点远,下面就简单讲一下项目的知识,后面还有实战。

1、先要安装呢,我这里不介绍普通python安装Scrapy,太复杂了,要安装好多库,我用的是Anaconda,特别方便,在终端cmd输入conda install scrapy就行,还是有不明白的可以参考Anaconda按照Scrapy

2、安装好后,输入这条指令,会在你输入指令的那个目录下生成自定义项目名的Scrapy项目。

scrapy startproject 项目名

比如这是我在testScrapy目录下执行了scrapy startproject study后指定生成的目录,没有任何改动下,我们就是这么多文件。
在这里插入图片描述
3、而且它会提示你cd到项目目录下,输入指令生成一个spider文件。
在这里插入图片描述
这里我解释一下genspider后接的参数,第一个就是spider的名字,第二个是该爬虫的限定网域,以保证不会爬到别的网页去。

scrapy genspider test www.baidu.com

4、到上面我们这个框架算是完备了,看一下完整的目录。
(这是我的理解,有错误望指点一下)我们要需要修改的也就是test.py(Spider)、item.py、pipelines.py、settings.py。
在这里插入图片描述
而我们完成Scrapy项目大体的步骤如下,在后面实战项目中也有所体现:

  1. 新建爬虫项目
  2. 分析网页确定爬取的内容,修改items.py
  3. 编写spider爬虫,准备开始爬取网页了
  4. 编写pipelines.py,看看数据怎么处理(Scrapy也自带了数据处理)

好了,理论大概都讲完了,下面来个项目感觉一下,在项目里继续学习基础知识。

二、Scrapy简书网项目

1、思路步骤

生成Scrapy项目

scrapy startproject jianshu

生成Spider

scrapy genspider jianshuwang jianshu.com

在这里插入图片描述

1.1、分析网页

打开开发者工具看看,这是第一页的url。
在这里插入图片描述
因为这个网页没有具体的分页,滑动侧边进度条刷新出了新的内容且网页也没变,所以它是个异步加载,去看一下XHR文件。
在这里插入图片描述
我这复制下来了,方便大家看,可以看出它是由多个seen_snote_ids%5B%5D和一个page参数拼接成的,也就是说后面的网页都可以这样来请求,可是seen_snote_ids%5B%5D这个哪来的呢?
https://www.jianshu.com/?seen_snote_ids%5B%5D=60076928&seen_snote_ids%5B%5D=63913898&seen_snote_ids%5B%5D=59873546&seen_snote_ids%5B%5D=63405402&seen_snote_ids%5B%5D=59679766&seen_snote_ids%5B%5D=60717313&seen_snote_ids%5B%5D=62921759&page=2
我们随机取了其中一个全局查找了一下,发现这个id就是文章的data-note-id,ok了,这个问题解决了。
在这里插入图片描述

1.2、解析网页

我本来是想爬这些信息的,但考虑到meta的参数还是比较常用的,想分享给大家,于是改爬取详情页的信息(后面那张截图)。
在这里插入图片描述
在这里插入图片描述

1.3、编写item.py

这个文件会给你一个默认的模板,很方便,跟着修改就行,下面是我们需要的信息。

from scrapy import Item, Field

class JianshuItem(Item):
    title_url = Field()  # 标题链接
    title = Field()  # 标题

    author = Field()  # 作者 
    author_url = Field()  # 作者主页链接

    content = Field()  # 文章内容
    like = Field()  # 点赞数

    # time = Field()  # 发布时间
    # word_number = Field()  # 文章字数
    # reading_volume = Field()  # 阅读量

1.4、编写Spider

我们先获取每个文章的url,分析网页可以发现每个文章都是在一个个的li标签内,那先把li解析出来,在Scrapy中,是直接利用xpath解析response,这个response也就是下载器下载下来的网页(之前有提到,大家没忘记吧)。

这里也可以直接用xpath解析文章的url然后用extract()返回一个url的列表,能够理解的可以自己改改,这里为了演示的易懂些。

item = JianshuItem()

li_xpath = '//li'
for li in response.xpath(li_xpath):
     # 标题链接
     item['title_url'] = 'https://www.jianshu.com' + li.xpath('div/a/@href').extract_first
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值