数据采取利器--Scrapy

一.简介

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架(异步爬虫框架) 通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。 Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度

1.异步和非阻塞的区别

异步:调用在发出之后,这个调用就直接返回,不管有无结果 非阻塞:关注的是程序在等待调用结果时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程

2.Scrapy的优缺点

优点:

  1. 高效性: Scrapy采用异步IO模型,能够高效地处理大规模的数据抓取任务。

  2. 灵活性: 提供了丰富的扩展机制和定制选项,可以根据需求进行灵活的定制和扩展。

  3. 文档丰富: 拥有详细的官方文档和活跃的社区支持,对于新手和有经验的开发者都有很好的学习资源。

缺点:

  1. 学习曲线: 对于初学者来说,Scrapy的学习曲线可能相对陡峭,需要一定的时间和精力来掌握其各种概念和技巧。

  2. 对JavaScript渲染页面支持有限: Scrapy默认情况下不支持JavaScript渲染页面的抓取,需要配合其他工具或技术进行处理。

  3. 资源消耗较大: 在处理大规模数据抓取任务时,Scrapy可能会消耗较多的系统资源,需要合理配置和管理。

二.Scrapy的工作流程

1.Scrapy组件

1.引擎(engine) scrapy已经实现

scrapy的核心, 所有模块的衔接, 数据流程梳理

2.调度器(scheduler) scrapy已经实现

本质上这东西可以看成是一个队列,里面存放着一堆我们即将要发送的请求,可以看成是一个url的容器

它决定了下一步要去爬取哪一个url,通常我们在这里可以对url进行去重操作。

3.下载器(downloader) scrapy已经实现

它的本质就是用来发动请求的一个模块,小白们完全可以把它理解成是一个requests.get()的功能,

只不过这货返回的是一个response对象.

4.爬虫(spider) 需要手写

这是我们要写的第一个部分的内容, 负责解析下载器返回的response对象,从中提取到我们需要的数据

5.管道(Item pipeline)

这是我们要写的第二个部分的内容, 主要负责数据的存储和各种持久化操作

6.下载中间件(downloader Middlewares)

一般不用手写

可以自定义的下载扩展 比如设置代理 处理引擎与下载器之间的请求与响应(用的比较多)

7 .爬虫中间件(Spider Middlewares) 一般不用手写

可以自定义requests请求和进行response过滤(处理爬虫程序的响应和输出结果以及新的请求)

2.Scrapy文件说明

python 复制代码
    # 爬虫程序的名字
    name = 'bd'
    # 可以爬取的范围
    # 有可能我们在实际进行爬取的时候  第一页可能是xxx.com 第三页可能就变成了xxx.cn 
    # 或者xxx.yy 那么可能就会爬取不到数据
    # 所以我们需要对allowed_domains进行一个列表的添加
    allowed_domains = ['baidu.com']
    # 起始url地址  会根据我们的allowed_domains对网页前缀进行一定的补全 
    # 但有时候补全的url不对 所以我们也要去对他进行修改
    start_urls = ['https://www.baidu.com/']

    # 专门用于解析数据的
    def parse(self, response):  

items.py 数据封装的

middlewares.py 中间件(爬虫中间件和下载中间件)

pipelines.py 管道(保存数据的)

settings.py Scrapy的配置项

1 自动生成的配置,无需关注,不用修改

python 复制代码
BOT_NAME = 'mySpider'
SPIDER_MODULES = ['mySpider.spiders']
NEWSPIDER_MODULE = 'mySpider.spiders'

2 取消日志

python 复制代码
LOG_LEVEL = 'WARNING'

3 设置UA,但不常用,一般都是在MiddleWare中添加

python 复制代码
USER_AGENT = 'mySpider (+http://www.yourdomain.com)'

4 遵循robots.txt中的爬虫规则,很多人喜欢False,当然我也喜欢....

python 复制代码
ROBOTSTXT_OBEY = True

5 对网站并发请求总数,默认16

python 复制代码
CONCURRENT_REQUESTS = 32

6 相同网站两个请求之间的间隔时间,默认是0s。相当于time.sleep()

python 复制代码
DOWNLOAD_DELAY = 3

7 禁用cookie,默认是True,启用

python 复制代码
COOKIES_ENABLED = False

8 默认的请求头设置

python 复制代码
DEFAULT_REQUEST_HEADERS = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
}

9 配置启用爬虫中间件,Key是class,Value是优先级

python 复制代码
SPIDER_MIDDLEWARES = {
   'mySpider.middlewares.MyspiderSpiderMiddleware': 543,
}

10 配置启用Downloader MiddleWares下载中间件

python 复制代码
DOWNLOADER_MIDDLEWARES = {
   'mySpider.middlewares.MyspiderDownloaderMiddleware': 543,
}

11 开启管道 配置启用Pipeline用来持久化数据

python 复制代码
ITEM_PIPELINES = {
   'mySpider.pipelines.MyspiderPipeline': 300,
}

三.Scrapy快速入门

安装Scrapy: 在命令行中使用pip安装Scrapy:

pip install scrapy

创建一个新项目: 在命令行中使用scrapy startproject命令创建一个新的Scrapy项目。例如:

scrapy startproject myproject

定义爬虫: 进入项目目录,并使用scrapy genspider命令创建一个新的爬虫。例如:

cd myproject scrapy genspider myspider example.com

编写爬虫代码: 打开新创建的爬虫文件(位于spiders目录下),在其中编写抓取逻辑和数据提取规则。

执行爬虫程序:

scrapy crawl bd
scrapy crawl:固定的
db:执行的爬虫程序的名字

可以通过start.py文件执行爬虫项目:
from scrapy import cmdline
cmdline.execute("scrapy crawl bd".split())

相关推荐
ac-er88881 小时前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
聪明的墨菲特i4 小时前
Python爬虫学习
爬虫·python·学习
oliveira-time6 小时前
爬虫学习6
爬虫
xiaoxiongip66610 小时前
HTTP 和 HTTPS
网络·爬虫·网络协议·tcp/ip·http·https·ip
兆。13 小时前
掌握 PyQt5:从零开始的桌面应用开发
开发语言·爬虫·python·qt
API快乐传递者19 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
兜里有糖请分享1 天前
Python中序列化/反序列化JSON格式的数据
爬虫·python
亿牛云爬虫专家1 天前
用Puppeteer点击与数据爬取:实现动态网页交互
javascript·爬虫·爬虫代理·puppeteer·数据·代理ip·16yun
API快乐传递者2 天前
利用Python 的爬虫技术淘宝天猫销量和库存
开发语言·爬虫·python
操练起来2 天前
【Python实战案例】爬虫项目实例(附赠源码)
数据库·爬虫·python