scrapy

作者: qianxun0921 | 来源:发表于2019-01-06 17:29 被阅读0次

scrapy学习

一、scrapy框架介绍

Image.png

Scrapy Engine(引擎):

负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器):

它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):

负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):

它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline(管道):

它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):

你可以当作是一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):

你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

二、scrapy项目建立

新建项目

scrapy startproject myspider

新建爬虫文件

scrapy genspider jobbole jobbole.com

三、Item Pipeline管道

案例:

import something

class SomethingPipeline(object):
def __init__(self):
# 可选实现,做参数初始化等
# doing something

def process_item(self, item, spider):
# item (Item 对象) – 被爬取的item
# spider (Spider 对象) – 爬取该item的spider
# 这个方法必须实现,每个item pipeline组件都需要调用该方法,
# 这个方法必须返回一个 Item 对象,被丢弃的item将不会被之后的pipeline组件所处理。
return item

def open_spider(self, spider):
# spider (Spider 对象) – 被开启的spider
# 可选实现,当spider被开启时,这个方法被调用。

def close_spider(self, spider):
# spider (Spider 对象) – 被关闭的spider
# 可选实现,当spider被关闭时,这个方法被调用

四、Scrapy Spider文件介绍

scrapy.Spider是最基本的类,所有编写的爬虫必须继承这个类。
主要用到的函数及调用顺序为:

init() :

初始化爬虫名字和start_urls列表

start_requests() 调用make_requests_from url():

生成Requests对象交给Scrapy下载并返回response

parse():

解析response,并返回Item或Requests(需指定回调函数)。
Item传给Item pipline持久化 , 而Requests交由Scrapy下载,并由指定的回调函数处理(默认parse()),一直进行循环,直到处理完所有的数据为止。

主要属性和方法
name

定义spider名字的字符串。

allowed_domains

包含了spider允许爬取的域名(domain)的列表,可选。

start_urls

初始URL元组/列表。当没有制定特定的URL时,spider将从该列
表中开始进行爬取。

start_requests(self)

该方法必须返回一个可迭代对象(iterable)。该对象包含了
spider用于爬取(默认实现是使用 start_urls 的url)的第
一个Request。
当spider启动爬取并且未指定start_urls时,该方法被调用。

parse(self, response)

当请求url返回网页没有指定回调函数时,默认的Request对象回
调函数。用来处理网页返回的response,以及生成Item或者
Request对象。

log(self, message[, level, component])

使用 scrapy.log.msg() 方法记录(log)message。

五、Scrapy CrawlSpiders介绍和使用

class XcfcrawlspiderSpider(CrawlSpider):
#爬虫名称
name = 'xcfCrawlSpider'
#设置允许爬取的域
allowed_domains = ['xiachufang.com']
#设置起始的url
start_urls = ['http://www.xiachufang.com/category/']
rules = (
Rule(
LinkExtractor(allow=r'.*?/category/\d+/'),
callback='parse_item',
follow=True,
process_links='check_category_url'
),
)

rules
link_extractor:

是一个Link Extractor对象,用于定义需要提取的链接。

callback:

从link_extractor中每获取到链接得到Responses时,会调用参数所指定的值作为回调函数,该回调函数接收一个response作为其一个参数。

follow:

是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。如果callback为None,follow 默认设置为True ,否则默认为False。

process_links:

指定spider中哪个的函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数。该方法主要用来过滤。

process_request:

指定处理函数,根据该Rule提取到的每个Request时,该函数将会被调用,可以对Request进行处理,该函数必须返回Request或者None

LinkExtractorsclass scrapy.linkextractors.LinkExtractor
LinkExtractors 的目的很简单: 提取链接。

class scrapy.linkextractors.LinkExtractor(
allow = (),
deny = (),
allow_domains = (),
deny_domains = (),
deny_extensions = None,
restrict_xpaths = (),
tags = ('a','area'),
attrs = ('href'),
canonicalize = True,
unique = True,
process_value = None
)

主要参数:

allow:

满足括号中“正则表达式”的URL会被提取,如果为空,则全部匹配。

deny:

满足括号中“正则表达式”的URL一定不提取(优先级高于allow)。

allow_domains:

会提取的链接的domains。

deny_domains:

一定不会被提取链接的domains。

restrict_xpaths:

使用xpath表达式,和allow共同作用过滤链接。

六、Scrapy Request和Response相关参数介绍

Request 相关参数:

url:

就是需要请求,并进行下一步处理的url

callback:

指定该请求返回的Response,由那个函数来处理。

method:

请求一般不需要指定,默认GET方法,可设置为"GET", "POST", "PUT"等,且保证字符串大写

headers:

请求头

cookies:

cookies,模拟用户登录需要指定用户的cookies,字典dict型

meta:

比较常用,在不同的请求之间传递数据使用的。字典dict型

request_with_cookies = Request(
url="http://www.example.com",
cookies={'currency': 'USD', 'country': 'UY'},
meta={'dont_merge_cookies': True}
)

encoding:

编码类型,使用默认的 'utf-8' 就行。

dont_filter:

表明该请求不由调度器过滤。这是当你想使用多次执行相同的请求,忽略重复的过滤器。默认为False。

errback:

指定错误处理函数

Response相关参数介绍

status:

响应码

body:

响应体

url:

响应url

self.request

(request对象)

self.headers

(响应头)

相关文章

  • 简单 Scrapy 使用小结

    Scrapy 安装Scrapy pip install scrapy Scrapy Doc 查看Scrapy的文档...

  • scrapy框架

    一、scrapy简介 二、scrapy原理 三、scrapy工作流程 四、scrapy框架的创建 五、scrapy...

  • Scrapy笔记

    Scrapy笔记 安装scrapy框架: 安装scrapy:通过pip install scrapy即可安装。 如...

  • scrapy笔记

    1 scrapy的运行原理 参考:Learning Scrapy笔记(三)- Scrapy基础Scrapy爬虫入门...

  • Scrapy基础(一): 安装和使用

    安装 新建scrapy项目 目录 scrapy模板 使用pycharm调试scrapy执行流程 scrapy 终端...

  • python爬虫13:scrapy

    scrapy的结构 scrapy的工作原理 scrapy的用法

  • Scrapy笔记

    Scrapy笔记 pip 指定源安装模块 创建Scrapy项目 创建Scrapy爬虫程序 启动Scrapy爬虫 在...

  • PyCharm运行和调试Scrapy

    前言: PyCharm运行和调试Scrapy,首先需要安装Scrapy,安装Scrapy请点链接Scrapy的安装...

  • 11- Scrapy-Redis分布式

    Scrapy和Scrapy-Redis的区别 安装Scrapy-Redis Scrapy-Redis介绍 提供了下...

  • scrapy框架基本使用

    scrapy基本介绍 scrapy VS requests Mac安装 conda install scrapy ...

网友评论

      本文标题:scrapy

      本文链接:https://www.haomeiwen.com/subject/lewsrqtx.html