Scrapy- 异步爬虫框架-分布式爬虫scrapy-redis-python爬虫知识点8

一、scrapy简介

什么是Scrapy

  • Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取
    Scrapy,基于异步,使用了Twisted异步网络框架,可以加快我们的下载速度

优点

  • 可配置、可扩展性非常高
  • 比较灵活,让稳定和快速
  • 基于异步,内部封装了这个twisted异步网络框架,复杂,采用了大量闭包
  • 也提供了可控的速度

异步和非阻塞的区别

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

(一)scrapy 的工作流程

在这里插入图片描述

Scrapy 功能组成 作用 是否还要编写
Scrapy engine(引擎) 总指挥:负责数据和信号的在不同模块间的传递 发动机、统筹全局、整个框架的核心 不需要 , scrapy已经实现
Scheduler(调度器) 一个队列,存放引擎发过来的request请求(接收从引擎发过来的url,入列,然后向引擎发送request请求,直到url全部取完) 不需要
Downloader(下载器) 接收引擎发过来的请求,发出网页请求,得到相应结果,源码给引擎 不需要
Spider(爬虫) 处理引擎发来的response,提取数据,提取url,并交给引擎 需要手写
Item Pipline(管道) 处理引擎传过来的数据,比如存储(数据处理、存储数据) 需要手写
Downloader Middlewares(下载中间件) 可以设置headers、代理IP等),处理引擎和下载器之间的请求和响应 一般不用手写
Spider Middlewares(爬虫中间件) 可以自定义requests请求和进行response过滤。处理下载器之间的 请求与响应、和发出新的请求) 一般不用手写

(二)要用到的方法

一些方法 作 用
response.body 返回网页源代码,未解码
response.text 返回网页源代码,解码str形式
response.xpath(xpath路径) xapth路径,和普通xpath一样
scrapy.Request() 返回给下载器,翻页和爬详情页会用到 ,参数:callback回调函数、dont_filter=True,默认false去重,meta={‘item’:item}用来给回调函数传参

meta覆盖问题

  • 利用meta参数在进行不同的解析方法之间传递数据的时候,如果需要继续的交给调度器去请求,会出现item被覆盖的问题
  • 解决方案:1 用deepcopy 2 创建新的item对象

二、scrapy 的快速入门

(一)前期准备

第一步 先创建scrapy项目 (dos命令行 pycharm终端)

  • scrapy startproject mySpider(scrapy项目的名称)
scrapy startproject gsw

第二步 创建爬虫程序

  • scrapy genspider demo “demo.cn” (demo是你爬虫的名字 demo.cn 爬取的范围)
  • demo的名字最好不要和scrapy项目的名称重合
  • 记得切换工作环境 cd
scrapy genspider gs "gushiwen.cn"

第三步 运行scrapy的命令

  • 1 在终端 scrapy crawl 爬虫程序名字(例如db)
  • 2 可以定义一个提供运行py文件,可以存在scrapy.cfg并列的文件夹里,例如start.py,用start来运行整个框架程序
# 运行py文件,写入
from scrapy import cmdline
#cmdline.execute('scrapy crawl gs'.split()) 
cmdline.execute(['scrapy','crawl','gs'])

在这里插入图片描述

(二)items.py封装文件

  • 这里封装的是爬取下来的数据item,将其封装到类里面
    import scrapy
    class GswItem(scrapy.Item):
    	 # define the fields for your item here like:
        # name = scrapy.Field()
    	title = scrapy.Field()
    	author = scrapy.Field()
    	dynasty = scrapy.Field()
    	content = scrapy.Field()
    	pass
    

(三)settings.py配置项文件

为什么需要配置文件:

  • 配置文件存放一些公共的变量(比如数据库的地址,账号密码等)
    方便自己和别人修改
  • 一般用全大写字母命名变量名 SQL_HOST = ‘192.168.0.1’
  • settings文件详细信息:https://www.cnblogs.com/cnkai/p/7399573.html

OBOTSTXT_OBEY = False网站的君子协议

  • 我们不遵守,改成False

CONCURRENT_REQUESTS = 16并发量

  • 默认的并发量16

DOWNLOAD_DELAY = 1下载延迟

  • 下载延迟默认3秒,改为1秒

COOKIES_ENABLED = False

  • 默认是注释的,禁用
  • 取消注释
    • False 找到是settings请求抱头的cookies
    • True 找到是下载中间键的cookies

DEFAULT_REQUEST_HEADERS请求抱头

  • DEFAULT_REQUEST_HEADERS = {
    ‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36’,
    ‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8’,
    ‘Accept-Language’: ‘en’,
    }

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋芋本人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值