学习Scrapy一点总结

学习Scrapy一点总结

1、安装

先安装twiste

pip install twisted	

再安装scrapy

pip install scrapy

中途会遇到pywin32错误

安装pypiwin32

pip install pypiwin32

2、scrapy学习网址

scrapy学习网址

3、scrapy目录结构

scrapy.cfg
myproject/
	__init__.py
    items.py
    pipelines.py
    settings.py
    spiders/
    	__init__.py
        spider1.py
        spider2.py

scrapy.cfg:存放的目录被认为是项目的根目录,项目的配置文件。

myproject:项目的python模块,将会从这里引用代码。

items.py:定义了存储数据的字段名,在编辑此文件前需先分析要提取哪些信息,定义好名称即可

pipelines.py:此文件是用来处理提取的数据,可以将数据转存为其他格式或数据库中,如果要用此文件,需要先在settings.py中指明pipelines.py中的类,并且如果有多个类的话,还要定义优先级,就是后面的数字,越小优先级越高,在每个pipeline类中必有一个process_item的函数,函数是数据处理的具体流程。

settings.py:一些项目的设置

Scrapy的运行机制

(1)、引擎从调度器中取出一个URl,用于接下来的抓取

(2)、引擎把URL封装成请求(Request)传给下载器,下载器把资源下载后封装成答应包(Response)

(3)、爬虫解析Response

(4)、若解析出实体(Item),则交给实体管道进行进一步的处理

(5)、若解析出的是URL,则把URL交给Scheduler等待抓取

Scrapy运行离不开各个组件相互合作和调度

引擎(Scrapy):处理整个系统的数据流,触发事物(框架核心)

调度器(Scheduler):接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回。

下载器(Downloader):用于下载网页内容,并将网页内容返回给蜘蛛(Scrapy下载器的运行原理是基于Twisted框架实现的)

爬虫(Spiders):从特定的网页中提取自己需要的信息,即实体(Item)。也可以从中提出URl,让Scrapy继续抓取下一个页面。

项目管道(Item Pipeline):负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体,验证实体的有效性,清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

下载器中间件(Downloader Middleware):位于Scrapy引擎和下载器之间的框架,处理引擎与下载器之间的请求及响应。

爬虫中间件(Spider Middleware):介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。

调度中间件(Scheduler Middleware):介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

4、创建项目

1、创建项目目录

scrapy startproject huangzhounews

2、创建一个新的spider项目

scrapy genspider hangzhou hznews.hangzhou.com.cn
# 后面加的是域名

创建完毕之后,就会在spiders目录下生成一个hangzhou.py的文件

import scrapy

class HangzhouSpider(scrapy.Spider):
    name = 'hanghzou'
    allowed_domains = ['hznews.hangzhou.com.cn']
    start_urls = ['http://hznews.hangzhou.com.cn/']
    
    def parse(self,response):
        pass

1、name = ‘’:这个爬虫的识别名称,必需是唯一的,在不同的爬虫必需定义不同的名字。(一般和文件名一样)

2、allow_domains = []:是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略。

3、start_urls = ():爬取的url元组/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URl中继承性生成。

4、parse(self,response):解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数,主要作用如下:

负责解析返回的网页数据(response.body),提取结构化数据(生成item)生成需要下一页的URL请求

查看所有爬虫

scrapy list

5、scrapy shell

1、执行爬虫,并且把结果保存到指定文件

scrapy crawl hanghzou -o hanghou.json

2、在执行之前,也可以用scrapy shell对xpath()/css()表达式进行验证,能否提取到数据。

之所以用scrapy shell运行项目来检测,是因为有的网站对于访问次数和频率有限制,如果频繁运行项目,向对方网站发送过多请求,就可能导致网站拒绝访问。

而scrapy shell 在调试的时候,一旦和某一个页面建立链接,这个链接就不会中断,可以不停的测试css和xpath,在此期间scrapy shell只向某一个url发送了一次请求,所以可以减轻对网站的访问率,而且调试也方便。

可用方法

  • shelp():打印可用的对象和方法
  • fetch(url[,redirect=True]):爬取新的url并更新相关对象
  • fetch(request):通过request爬取,并更新相关对象
  • view(response):使用本地浏览器打开爬取页面
  • response.xpath(xpath):用于验证是否匹配成功

6、中间件

Scrapy框架中的中间件主要分两类:爬虫中间件和下载中间件。其中最重要的是下载中间件,反爬策略都部署在下载中间件。

爬虫中间件

爬虫中间件是介入到Scrapy的spider处理机制的钩子框架,可以添加代码来处理发送给 Spiders 的response及spider产生的item和request。

  1. 当蜘蛛传递请求和items给引擎的过程中,蜘蛛中间件可以对其进行处理(过滤出 URL 长度比 URLLENGTH_LIMIT 的 request。)
  2. 当引擎传递响应给蜘蛛的过程中,蜘蛛中间件可以对响应进行过滤(例如过滤出所有失败(错误)的 HTTP response)

下载中间件

下载中间件是处于引擎(Engine)和下载器(Downloader)之间的一层组件,可以有多个下载中间件被加载运行。

  1. 当引擎传递请求给下载器的过程中,下载中间件可以对请求进行处理 (例如增加http header信息,增加proxy信息等);
  2. 在下载器完成http请求,传递响应给引擎的过程中, 下载中间件可以对响应进行处理(例如进行gzip的解压等)
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值