当前位置: 首页 > news >正文

【Scrapy】Scrapy教程5——第一个Scrapy项目

文章目录

  • Scrapy目录结构
  • 第一个爬虫
  • 运行爬虫
  • 必要说明
    • start_requests()和start_urls
    • 如何关闭allowed_domains的限制

通过前几节的学习,我们已经了解了Scrapy的基本操作,下面我们开始第一个项目,我以本人的 网址为例进行爬虫讲解,之所以用我自己的网站,是因为我这个网站本来就是做知识分享用的,共大家学习,不会去限制爬取,现在很多网站为了防止爬虫,都会做很多限制策略,不适合新手练习,本人就提供这样一个练习平台给大家。当然维护网站不易,如果你学到了知识,也请给作者一杯咖啡的钱谢谢🙏。
注:本教程的所有代码均在windows上完成的,其他系统文件路径或系统相关命令可以会有区别。

Scrapy目录结构

我们先回过头,再看下Scrapy目录结构,这次要说明的就不是根目录和项目目录的作用了,而是要对每个文件及目录进行下说明,开始编写我们的第一个爬虫。
首先使用命令创建爬虫项目,我的网站主要是做知识内容分享的,所以项目名称就叫KnowledgeSharing,使用命令创建如下

scrapy startproject KnowledgeSharing

爬取的网页就是首页,我们爬虫名就叫shouye,使用命令创建如下

cd KnowledgeSharing
scrapy genspider shouye www.jayhgq.cn

执行以上命令后,我们会得到以下目录,我在每个文件后面加了注释,解释这个文件的作用。

├─KnowledgeSharing  # 项目目录,即我说的根目录
│  │  scrapy.cfg  # 项目的主要配置信息,部署时从这个文件中查询配置
│  │
│  └─KnowledgeSharing  # 爬虫程序目录
│      │  items.py  # 数据存储模版文件,用于结构化数据
│      │  middlewares.py  # 中间件文件,用于编写爬虫中间件和下载器中间件
│      │  pipelines.py  # 数据处理文件,一般用来存储结构化后的数据
│      │  settings.py  # 配置文件,如设置请求头、递归层数等等,所有选项必须大写,否则无效
│      │  __init__.py  # 初始化文件,和python的__init__.py文件一样,用于将目录标记为包和包的初始化
│      │
│      ├─spiders  # 爬虫代码文件夹
│      │  │  shouye.py  # 刚刚创建的爬虫代码文件,用来编写爬虫规则
│      │  │  __init__.py  # 初始化文件

第一个爬虫

知道了Scrapy的目录结构,我们可以动手开始做我们的第一个爬虫了,从目录结构中能看到,爬虫规则是写在spiders文件夹下的爬虫代码文件中,刚创建的第一个爬虫代码文件叫shouye.py,我们打开这个文件,可以看到以下内容,同样我为代码加上了注释,一定要仔细看注释,不然后面可能有些内容会不清楚。

import scrapy  # 导入scrapy包

# 爬虫类,类名一般是name+Spider,必须是Spider的子类,即需要继承Spider才能被Scrapy识别
class ShouyeSpider(scrapy.Spider):
    # 爬虫名称name,一个项目中名称需要保持唯一
    name = "shouye"
    # allowed_domains允许访问的域名列表,默认开启,只允许爬取该列表下的页面,可在settings.py的中间件中部分关闭
    allowed_domains = ["www.jayhgq.cn"]
    # 第一个请求的地址默认从start_urls中获取
    start_urls = ["https://www.jayhgq.cn"]

	# 默认回调函数parse,用来处理请求的响应response,可以在这里进行数据提取
    def parse(self, response):
        pass

以上是用scrapy的genspider命令自动生成的,但是这样我们执行什么都存储不下来,我们来做下简单的改动,如下

# 导入pathlib来处理文件路径等问题
from

相关文章:

  • LeetCode 2080.区间内查询数字的频率:哈希表+二分查找
  • 在线OJ答题平台功能实现
  • 基于JavaWeb的公务员招考信息发布平台(源码+文档)
  • 调用openssl实现加解密算法
  • git删除本地分支
  • python继承中super() 不是简单的“调用父类”,而是调用 MRO 里的下一个类
  • LeetCode每日精进:225.用队列实现栈
  • 「pandas」Pandas 基本数据操作、 索引、赋值、排序
  • 网络工程师 (45)网际控制报文协议ICMP
  • blackbox.ai 一站式AI代理 畅享顶级模型
  • 如何使用 vxe-table grid 全配置式给单元格字段格式化内容,格式化下拉选项内容
  • MybatisPlus-扩展功能
  • Axure RP11 新功能:为设计师插上“翅膀”
  • Low code web framework for real world applications, in Python and Javascript
  • 基于SpringBoot+Vue的老年人体检管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • Android JNI的理解与使用。
  • 获取某厂招聘岗位信息
  • linux 面试题
  • 后台管理系统-项目初始化
  • 网络编程(24)——实现带参数的http-get请求
  • 许昌市场监管部门对胖东来玉石开展日常检查:平均毛利率不超20%
  • 长三角铁路今日预计发送386万人次,沪宁、沪杭等方向尚有余票
  • 想要“逆转”糖尿病,减少这两处脂肪是关键
  • 洪纬读《制造三文鱼》丨毒素缠身的水生鸡
  • 重庆市大渡口区区长黄红已任九龙坡区政协党组书记
  • 产假工资是谁出?女职工生育能领多少生育津贴?解答来了