scrapy框架 爬取重庆工程学院

本文详细介绍了如何使用Scrapy框架爬取重庆工程学院管理学院的学院动态。首先分析了目标页面结构,然后创建Scrapy项目,编写爬虫代码,包括解析页面获取初步信息和深入详情页抓取更多数据。同时,文章还讨论了Scrapy的运行机制和数据流程,以及解决Scrapy在输出CSV文件时可能出现的问题。最后,展示了如何将爬取的数据存储到MySQL数据库和MongoDB中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scrapy框架 爬取重庆工程学院

目的:爬取重庆工程学院 中的管理学院学院动态

百度搜索重庆工程学院,看到如图所示
在这里插入图片描述
在这里插入图片描述

因为我使用scarpy框架,不知道如何创建项目的,可以看看我之前的文章(简单的理了一下步奏)

Scrapy 架构

下图是 Scrapy 框架的组成结构,并从数据流的角度揭示 Scrapy 的工作原理
在这里插入图片描述
在这里插入图片描述
对于用户来说, Spider 是最核心的组件, Scrap y 爬虫开发是围绕实现 Spider 展开 的。接下来,看一下在框架中的数据流。Request 和 Response 是 HTTP 协议中的术语, 即 HTTP 请求和 HTTP 响应,Scrap y 框架中定义了相应的 Request 和 Response 类,这里的 Item 代表 Spider 从页面中爬取的一项数据。 最后,我们来说明以上几种对象在框架中的流动过程。

1、当 SPIDER 要爬取某 URL 地址的页面时, 需使用该 URL 构造一个 Request 对象, 提 交给 ENGINE(图 1)。

2、Request对象随后进入SCHEDULER按某种算法进行排队,之后的某个时刻SCHEDULER 将其出队, 送往 DOWNLOADER(图中的 2、3、4)

3、DOWNLOADER 根据 Request 对象中的 URL 地址发送一次 HTTP 请求到网站服务器, 之 后用服务器返回的 HTTP 响应构造出一个 Response 对象, 其中包含页面的 HTML 文本 (图 2 中的 5)

4、Response 对象最终会被递送给 SPIDER 的页面解析函数(构造 Request 对象时指定) 进行处理,页面解析函数从页面中提取数据, 封装成 Item 后提交给 PIPELINES 进行处理, 最终可能由 Exporter 以某种数据格式写入文件(CSV、json 等);另一方面页面解析函数还 从页面中提取链接 url,构造出新的 Request 对象提交给 Engine(图 6,7,8)。

理解了框架中的数据流,也就理解了 Scrapy 爬虫的工作原理。如果把框架中的组件比 作人体的各个器官,Request 和 Response 对象便是血液,Item 则是代谢产物

(一)首先分析页面

通过工具,我们可以发现我们需要的内容位于 li 标签当中,是一条一条的数据,其中的信息包含有时间、标题和详情页的链接,但是我们发现了一个问题,就是超链接的href属性并不完全,所以当我们需要爬取更多详情页的信息时,需要将链接补充完整。在这里插入图片描述

我们可以看出,在第一阶段我们可以爬取到的有三个实体,链接(url),时间(date),标题(title),因为后面要做详情页的爬取,所以我选择在详情页的时候在爬取标题,当然在这爬取是一样的,只有你的XPath是找对了是没有问题。

我使用的是谷歌浏览器,安装了一个插件(XPath Helper),可以自己去下载哟,下载之后解压,在浏览器的右上角,点击下方如图所示:
在这里插入图片描述
再 点击 “更多程序”—>“扩展程序” —>将“开发者工具”打开—>“加载已解压的扩展程序”

选择好了就可以用了哟!!!!

接下来就是重头戏哟!!!

创建爬虫项目和文件

我使用的是 Anconda里面的Spyder,使用pycharm也是可以的,只要自己熟悉就可以啦~~~~

我还是写下创建项目的命令

scrapy startproject cqie

创建文件:

cd cqie  #进入项目
scrapy genspider cqiel  cqie.edu.cn  # cqiel是爬虫名  cqie.edu.cn是域名,千万不能写成http://www.cqie.edu.cn/,不了解域名的,可以去学习学习...

接下来就是编写代码了:

首先是cqiel.py文件
def parse(self, response):
        
        item={
   }
        # print(response.text)
        entryList=response.xpath("//div[@class='sortlist']/dl//li")
        # print(len(entryList))
        
        for i in entryList:
            item['url'] = response.urljoin(i.xpath("./a/@href").get())
            item['date'] = i.xpath("./span/text()").get()
            #print(item)
            yield item
深层网页爬取:

在这里插入图片描述
在这里插入图片描述
scrapy.Request:在这里插入图片描述
常用参数说明
Url:
Callback:回调函数,执行完成当前方法后调用
Meta:元数据,用于数据传递

def parse_detail(self, response):
        item=response.meta['item']
        item['title']=response.xpath("//div[@id='text']/h1/text()").get()
        item['laiyuan']=response.xpath("//div[@id='text']/h3/text()").get().split()[1].replace("来源:","")
        item['author']=response.xpath("//div[@id='text']/h3").xpath("substring-before(.,'来源:')"<
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是:网络请求:模拟浏览器的行为从网上抓取数据数据解析:将请求下来的数据进行过滤,提取我们想要的数据数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是:爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。Scrapy和分布式爬虫Scrapy框架Scrapy-redis组件、分布式爬虫等。通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求!【课程服务】 专属付费社群+定期答疑
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值