Quantcast
Channel: CodeSection,代码区,Python开发技术文章_教程 - CodeSec
Viewing all articles
Browse latest Browse all 9596

scrapy爬虫学习【五】综合

$
0
0
一、简介 Scrapy,python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。 1.1 框架介绍
scrapy爬虫学习【五】综合
Scrapy Engine

Scrapy引擎是用来控制整个系统的数据处理流程,并进行事务处理的触发。

Scheduler

调度程序从Scrapy引擎接受请求并排序列入队列,并在Scrapy引擎发出请求后返还给他们。

Downloader

下载器的主要职责是抓取网页并将网页内容返还给Spiders。

Spider

Spider是有Scrapy用户自己定义用来解析网页并抓取制定URL返回的内容的类,每个Spider都能处理一个域名或一组域名。换句话说就是用来定义特定网站的抓取和解析规则。

Item Pipeline

项目管道的主要责任是负责处理有蜘蛛从网页中抽取的项目,他的主要任务是清晰、验证和存储数据。当页面被蜘蛛解析后,将被发送到项目管道,并经过几个特定的次序处理数据。每个项目管道的组件都是有一个简单的方法组成的Python类。他们获取了项目并执行他们的方法,同时他们还需要确定的是是否需要在项目管道中继续执行下一步或是直接丢弃掉不处理。

Downloader middlewarer

下载中间件是位于Scrapy引擎和下载器之间的钩子框架,主要是处理Scrapy引擎与下载器之间的请求及响应。它提供了一个自定义的代码的方式来拓展Scrapy的功能。下载中间器是一个处理请求和响应的钩子框架。他是轻量级的,对Scrapy尽享全局控制的底层的系统。

Spider middlewares

蜘蛛中间件是介于Scrapy引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛的响应输入和请求输出。它提供一个自定义代码的方式来拓展Scrapy的功能。此中间件是一个挂接Scrapy的蜘蛛处理机制的框架,你可以插入自定义的代码来处理发送给蜘蛛的请求和返回蜘蛛获取的响应内容和项目。

Scheduler middlewarer

调度中间件是介于Scrapy引擎和调度之间的中间件,主要工作是处从Scrapy引擎发送到调度的请求和响应。他提供了一个自定义的代码来拓展Scrapy的功能。

1.2 爬取过程 以初始的URL初始化Request,并设置回调函数。当该request下载完毕并返回时,将生成response,并作为参数传给该回调函数。 spider中初始的request是通过调用 start_requests() 来获取的。start_requests() 读取 start_urls 中的URL, 并以 parse为回调函数生成 Request 。 在回调函数内分析返回的(网页)内容,返回Item对象或者Request或者一个包括二者的可迭代容器。返回的Request对象之后会经过Scrapy处理,下载相应的内容,并调用设置的callback函数(函数可相同)。在回调函数内,您可以使用 选择器(Selectors) (您也可以使用BeautifulSoup, lxml 或者您想用的任何解析器) 来分析网页内容,并根据分析的数据生成item。 最后,由spider返回的item将被存到数据库(由某些 Item Pipeline 处理)或使用 Feed exports 存入到文件中。 1.3 爬虫可以做什么有趣且高大上的事情 关注自己喜欢的人 科学研究 赚取人生的第一桶金 二、wooyun实例 2.1 item 2.1.1 item的简介

Item对象是一种简单的容器,用于存储结构化数据存储。它类似于字典有着和字典几乎相似的API接口。我们根据需要采集的数据定义不同的Item。如下所示:


scrapy爬虫学习【五】综合

我们需要爬取的数据有 缺陷编号 、 漏洞标题 、 相关厂商 、 漏洞作者 、 提交时间 、 公开时间 、 漏洞类型 。因此,需要定义如下的Item。

2.1.2 编写item # -*- coding: utf-8 -*- import scrapy from scrapyimport Field class WooyunSpiderItem(scrapy.Item): """ wid is the wooyun number like WooYun-2016-185980, title is the title of the vulnerability, corp is the relative corporation, author is vul's author, sub_time is the vul's submit time, pub_time is the vul's public time, classification is the vul's calss like SQL injection """ wid = Field() title = Field() corp = Field() author = Field() sub_time = Field() pub_time = Field() classification = Field() 2.2 spider 自动爬取

爬虫类有很多种,用得最多的应该是CrawlSpider。你可以以某个网站站点为起点,根据需求修改部分方法。

# -*- coding: utf-8 -*-

from scrapy.selector import Selector

from scrapy.spiders import Rule, CrawlSpider

from scrapy.linkextractors import LinkExtractor

from wooyun_spider.items import WooyunSpiderItem

from scrapy.utils.project import get_project_settings

SETTINGS = get_project_settings()

class MySpider(CrawlSpider):

name = SETTINGS["BOT_NAME"] download_delay = SETTINGS["DOWNLOAD_DELAY"] start_urls = SETTINGS["START_URLS"] rules = [

Rule(LinkExtractor(allow="/bugs/page/\d+", allow_domains="wooyun.org"), callback=None, follow=True),

Rule(LinkExtractor(allow="/bugs/wooyun.*", allow_domains="wooyu


Viewing all articles
Browse latest Browse all 9596

Trending Articles