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

Scrapy框架爬虫官网的学习

一、安装Scrapy框架

pip install scrapy

二、 创建scrapy框架默认目录

scrapy startproject tutorial
#tutorial为你的项目的名称

该炒作会为您自动创建项目目录

三、项目目录介绍

tutorial/scrapy.cfg            # deploy configuration filetutorial/             # project's Python module, you'll import your code from here__init__.pyitems.py          # project items definition filemiddlewares.py    # project middlewares filepipelines.py      # project pipelines filesettings.py       # project settings filespiders/          # a directory where you'll later put your spiders__init__.py

四、先从第一只爬虫开始吧

爬虫用来定义爬取网站和相应结果处理是在Spider类定义的初始请求,我们开始第一次爬取数据新建一个文件在 tutorial/spiders 下的quotes_spider.py 

import scrapyclass QuotesSpider(scrapy.Spider):#标记爬虫程序,他在项目是唯一的,不同的爬行器用不同的名称name = "quotes"#该方法必须返回一个请求的可迭代数据,爬虫会从第一个数据开始爬取def start_requests(self):urls = ['http://quotes.toscrape.com/page/1/','http://quotes.toscrape.com/page/2/',]for url in urls:yield scrapy.Request(url=url, callback=self.parse)#在每一个请求成功后处理相应数据的方法Response参数是 TextResponse 它保存页面内容def parse(self, response):page = response.url.split("/")[-2]filename = f'quotes-{page}.html'with open(filename, 'wb') as f:f.write(response.body)self.log(f'Saved file {filename}')

如何运行我们的爬虫代码呢?

跳转到项目顶级目录下运行:

scrapy crawl quotes
#quotes为爬虫文件的名称

代码会生成两个文件,类似于这样:、

这种方式可能不是那么快捷,有些操作是没有必要的,我们可以直接这样写

from pathlib import Pathimport scrapyclass QuotesSpider(scrapy.Spider):name = "quotes"#变量名为start_urls  会默认实现start_requests方法,无需书写该方法start_urls  = ["https://quotes.toscrape.com/page/1/","https://quotes.toscrape.com/page/2/",]def parse(self, response):page = response.url.split("/")[-2]filename = f"quotes-{page}.html"with open(filename, 'wb') as f:f.write(response.body)

个人理解就是省却了写一个方法通过命名变量的方式来默认实现 start_urls  方法

五、提取数据

最好的学习方式是使用shell进行学习

在终端上运行:

scrapy shell "http://quotes.toscrape.com/page/1/"

 你可以看到这样的结果:

http://www.xdnf.cn/news/1488.html

相关文章:

  • 放爱心烟花
  • # 构建和训练一个简单的CBOW词嵌入模型
  • GCoNet+:更强大的团队协作 Co-Salient 目标检测器 2023 GCoNet+(总结)
  • 【Deepseek学习大模型推理】MOONCAKE: A KVCache-centric Architecture调度(中)调度
  • win10 快速搭建 lnmp+swoole 环境 ,部署laravel6 与 swoole框架laravel-s项目3
  • 代码随想录算法训练营第二十五天
  • 卡方检验(Chi-square test)
  • 奇安信春招面试题
  • 在线测试来料公差
  • Java工厂模式解析:三种实现与最佳实践
  • 03-Java入门-JDK的安装和下载
  • 【KWDB 创作者计划】_上位机知识篇---PlatformIO
  • 用 Firebase 和 WebRTC 快速搭建一款浏览器视频聊天应用
  • 布布のC语言课堂——第一讲:揭开C语言的神秘面纱
  • 【KWDB 创作者计划】_深度学习篇---归一化反归一化
  • QtDesigner入门
  • bert4keras
  • mybatis框架补充
  • Spring JDBC 的开发步骤(非注解方式)
  • HashedWheelTimer源码分析
  • 网络安全中Base64编码到后端是何解了
  • 图解Mysql原理:深入理解事务的特性以及它的实现机制
  • IDEA设置手动代理,用户名密码被加密无法通过代码修改的解决方案
  • 4082P 信号/频谱分析仪
  • Javase 基础入门 —— 03 面向对象编程
  • (三)垂直分库架构、分布式数据库
  • MySQL 锁机制
  • 【EasyPan】MySQL FIELD() 函数实现自定义排序
  • [KVM] KVM挂起状态恢复失败与KVM存储池迁移
  • Geek强大的电脑卸载软件工具,免费下载