Scrapy框架实现数据采集的详细步骤

需求描述

本项目目标是使用Scrapy框架从宁波大学经济学院网站(nbufe.edu.cn)爬取新闻或公告详情页的内容。具体需求如下:

1、通过遍历多个页面(共55页)构建翻页URL。

2、使用scrapy自带的xpath从每页的HTML结构中提取新闻或公告详情页的链接。

3、对每个详情页,使用BeautifulSoup解析HTML并提取以下信息:

标题、来源、作者、时间、内容、撰稿、摄影、审核。最终将所有提取的信息存储在excel中。

创建scrapy爬虫项目

  1. 首先新建一个新的爬虫项目:

Cd 进入创建位置,scrapy genspider 爬虫名称+爬虫网站 创建新的爬虫项目

  1. scrapy项目文件

目录结构中的文件说明如下:

​ spiders(文件夹):用于创建爬虫文件,编写爬虫规则。

​ __ init __文件:初始化文件。

​ items文件:用于数据的定义,可以寄存处理后的数据。

​middlerwares文件:定义爬取时的中间件,其中包括SpiderMiddleware(爬虫中间件)、DownloaderMiddleware(下载中间件)

pipelines文件:用于实现清洗数据、验证数据、保存数据。

settings文件:整个框架的配置文件,主要包含配置爬虫信息,请求头、中间件等。

scrapy.cfg文件:项目部署文件,其中定义了项目等配置文件路径等相关信息。

爬虫制作

zyj.py文件:爬取数据

(1)Spider定义和配置:

name属性定义爬虫的名字为“zyj”。

start_urls属性包含了爬虫的初始URL列表,这里是宁波财经学院的主页。

(2)start_requests方法:

该方法用来生成初始请求。通过一个循环,生成从第1页到第55页的请求URL,并通过scrapy.Request发送请求。

(3)parse方法:

这个方法是对每个请求返回的响应进行处理。首先输出响应内容以供调试。

使用XPath选择器来找到包含目标数据的div标签,调试输出找到的div数量。遍历每个div,构造详情页的URL,并生成请求,同时将请求传递给parse_zyj方法进行详细处理。

(4)parse_zyj方法:

该方法负责解析详情页的内容。首先创建一个zyjItem实例来存储抓取的数据。使用BeautifulSoup解析响应的HTML内容。提取详情页的标题、来源、作者、时间、内容等信息,并处理可能出现的数据缺失情况,输出相应的调试信息。通过对特定标签的进一步解析,提取内容创作人、摄影和审核信息。如果解析失败,则将相应字段设为“N/A”。最后,输出解析后的item,并通过yield将其传递给Scrapy的Item Pipeline。

(5)网页定位

右键点击审查,定位标题列表页的标题以及详情页地址。如下图所示

定位详情页标题及文章来源作者时间等,div属性class的值为main_show_bt md

定位详情页内容,div属性class的值为main_show_nr md

最后使用beautifulsoup解析详情页,提取内容等信息。详细代码如下

item.py文件:

setting.py文件:将下面的语句解开注释。设置了默认的请求头(HTTP headers),用于每次请求时附加到HTTP请求中。主要包括以下两个字段:

Accept: 指定客户端可以处理的内容类型。text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8表示客户端可以接受HTML、XHTML、XML格式的响应,权重分别为0.9和0.8,表示HTML、XHTML和XML优先级较高。

User-Agent: 用于标识请求的客户端(浏览器)。这里设置了一个常见的浏览器用户代理字符串,模拟的是Google Chrome浏览器。这可以帮助避免一些网站因为识别到爬虫而进行的访问限制。

cookies: 添加了一个Cookies字段,用于在请求中携带特定的Cookies信息。这可能用于保持会话或通过某些网站的防爬虫措施。

另外还配置了Scrapy的项目管道(Item Pipelines),用于处理抓取到的项目(items)。配置的结构为字典形式,键为管道的路径,值为管道的优先级。zyj.pipelines.ZyjPipeline: 这是定义在项目中的一个管道类,路径是zyj.pipelines中的ZyjPipeline类。该管道类负责处理、清理或存储爬虫抓取到的数据。

300: 这是该管道的优先级。Scrapy允许定义多个管道,优先级数值越低,优先级越高。这里设置的300表示中等优先级。

Pipeline.py文件:将数据进行处理并保存到zyj.xlsx文件

  1. 运行。通过编程的方式启动名为zyj的Scrapy爬虫,等效于在命令行手动输入scrapy crawl zyj命令。这种方法适用于在Python脚本中启动爬虫,可以方便地集成到其他Python代码中,或用于调试和自动化任务。

  1. 结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/798521.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++基础(二十):常见C++11的新特性

1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C 语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。语言的发展就像是练功打怪…

项目三层架构详情

三层架构 三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问&#xf…

UDP网络通信(发送端+接收端)实例 —— Python

简介 在网络通信编程中,用的最多的就是UDP和TCP通信了,原理这里就不分析了,网上介绍也很多,这里简单列举一下各自的优缺点和使用场景 通信方式优点缺点适用场景UDP及时性好,快速视网络情况,存在丢包 与嵌入…

Windows终端远程登陆Linux服务器(SSH+VScode)

W i n d o w s 终端远程登陆 L i n u x 服务器( S S H V S c o d e ) \huge{Windows终端远程登陆Linux服务器(SSHVScode)} Windows终端远程登陆Linux服务器(SSHVScode) 文章目录 写在前面通过SSH远程连接L…

Postman下载及使用说明

Postman使用说明 Postman是什么? ​ Postman是一款接口对接工具【接口测试工具】 接口(前端接口)是什么? ​ 前端发送的请求普遍被称为接口 ​ 通常有网页的uri参数格式json/key-value请求方式post/get响应请求的格式json 接…

@google/model-viewer 导入 改纹理 (http-serve)

导入模型 改纹理 效果图 <template><div><h1>鞋模型</h1><model-viewerstyle"width: 300px; height: 300px"id"my-replace-people"src"/imgApi/Astronaut.glb"auto-rotatecamera-controls></model-viewer>&…

网络分层及通信过程

网络分层体系 主流的理论体系中主要包含三种网络分层模型&#xff0c;即ISO的七层网络模型、TCP/IP的四层网络模型以及结合两种模型优点的五层网络模型&#xff0c;关于网络模型&#xff0c;主要起到对网络体系的一个整体认识&#xff0c;作为网络知识学习的开始&#xff0c;这…

【Python进阶】正则表达式、pymysql模块

目录 一、正则表达式的概述 1、基本介绍 2、快速使用re模块 二、正则的常见规则 1、匹配单个字符 2、原始字符串 3、匹配多个字符 4、匹配开头和结尾 5、匹配分组 三、Python与MySQL交互 1、pymysql模块的安装 2、pymysql的操作步骤 3、connection对象 4、cursor…

【Git从入门到精通】——Git常用命令总结

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

购物系统 (GUI)

一、前言 1 研究背景 随着电子商务的快速发展&#xff0c;越来越多的消费者选择在网上购物。为了提高用户体验、提升交易效率和管理便捷性&#xff0c;许多企业和个人开始开发和使用各种类型的购物系统商城。而基于Java Swing的购物系统商城正是应运而生的一种应用。Java Swi…

C++中链表的底层迭代器实现

大家都知道在C的学习中迭代器是必不可少的&#xff0c;今天我们学习的是C中的链表的底层迭代器的实现&#xff0c;首先我们应该先知道链表的底层迭代器和顺序表的底层迭代器在实现上有什么区别&#xff0c;为什么顺序表的底层迭代器更加容易实现&#xff0c;而链表的底层迭代器…

更换Mac硬盘后如何将数据恢复到新驱动器?

在本文中&#xff0c;我们将分享几种在用新 Mac 硬盘替换旧 Mac 硬盘后从旧 Mac 硬盘恢复数据的方法。 您是否最近由于存储空间不足或损坏问题而必须更换新的Mac硬盘&#xff1f;是否要将受影响驱动器中的数据恢复到新驱动器&#xff1f;我们可以帮忙&#xff01;但是&#xf…

线性代数|机器学习-P24加速梯度下降(动量法)

文章目录 1. 概述2. 引入3. 动量法梯度下降 1. 概述 我们之前学的最速梯度下降[线搜索方法] 公式如下&#xff1a; x k 1 x k − s k ∇ f ( x k ) \begin{equation} x_{k1}x_k-s_k\nabla f(x_k) \end{equation} xk1​xk​−sk​∇f(xk​)​​ 但对于这种方法来说&#xff…

手机数据恢复篇:如何从 Android 设备内恢复数据

如何从 Android 内部存储恢复数据&#xff1f; 要从 Android 内部存储恢复已删除的文件&#xff0c;您需要一个 Android 内部存储恢复应用或程序。请继续阅读以获取可靠的 Android 数据恢复软件&#xff0c;并让它帮助您从 Android 手机的内部存储恢复数据。 是否有可能恢复 An…

【vue3-命名规范以及注意事项】

使用多字组件名 使用详细的道具定义props 在提交的代码中&#xff0c;prop定义应该总是尽可能详细&#xff0c;至少指定类型。 在声明期间&#xff0c;道具名应该始终使用camelCase。当在in-DOM模板中使用时&#xff0c;props应该是串式的。单文件组件模板和JSX可以使用keba…

sklearn之神经网络学习算法

文章目录 什么是神经网络人工神经网络的结构输入层输出层隐含层神经元的链接 近几年深度学习还是比较火的&#xff0c;尤其是在大语言模型之后&#xff0c;在本质上深度学习网络就是层数比较多的神经网络。sklearn并不支持深度学习&#xff0c;但是支持多层感知机&#xff08;浅…

AI 歌词创作:突破想象,惊艳听觉

在音乐的世界里&#xff0c;歌词是触动心灵的钥匙&#xff0c;是引发共鸣的桥梁。而如今&#xff0c;AI 歌词创作正以其惊人的力量&#xff0c;突破我们的想象&#xff0c;为我们带来前所未有的听觉盛宴。 “妙笔生词智能写歌词软件&#xff08;veve522&#xff09;”便是这场…

【机器学习-00】机器学习是什么?

在科技飞速发展的今天&#xff0c;机器学习已成为一个热门话题&#xff0c;广泛应用于各个行业和领域。那么&#xff0c;机器学习到底是什么&#xff1f;它又是如何工作的&#xff1f;本文将深入探讨机器学习的定义、原理及其在各领域的应用&#xff0c;带领读者走进这个神秘而…

QuantML-Qlib Model | ICLR 24: 基于独立Patch的时序预测模型

QuantML-Qlib Model | ICLR 24: 基于独立Patch的时序预测模型 原创 QuantML QuantML 2024年07月12日 19:23 上海 Content 论文提出了一种新的时间序列嵌入方法&#xff0c;主要观点是独立地嵌入时间序列块&#xff08;patches&#xff09;&#xff0c;而不是捕捉这些块之间的…

MySQl高级篇-主从复制

主从复制 复制的基本原理 slave会从master读取binlog来进行数据同步 MySQL复制过程分成三步&#xff1a; master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件&#xff0c;binary log events;slave将master的binary log events拷贝到它的中继日志(r…