Scrapy框架利用CrawlSpider创建自动爬虫

原创 2017年07月27日 09:48:43

 一、适用条件

   可以对有规律或者无规律的网站进行自动爬取


 二、代码讲解 

 (1)创健scrapy项目

E:myweb>scrapy startproject mycwpjt
New Scrapy project 'mycwpjt', using template directory 'd:\\python35\\lib\\site-packages\\scrapy\\templates\\project', created in:
    D:\Python35\myweb\part16\mycwpjt
You can start your first spider with:
    cd mycwpjt
    scrapy genspider example example.com
 (2) 创健爬虫

E:\myweb>scrapy genspider -t crawl weisuen sohu.com
Created spider 'weisuen' using template 'crawl' in module:
  Mycwpjt.spiders.weisuen
(3)item编写

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

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class MycwpjtItem(scrapy.Item):
    # define the fields for your item here like:
    name = scrapy.Field()
    link = scrapy.Field()

(4)pipeline编写

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

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html


class MycwpjtPipeline(object):
    def process_item(self, item, spider):
        print(item["name"])
        print(item["link"])
        return item

(5)settings设置

ITEM_PIPELINES = {
   'mycwpjt.pipelines.MycwpjtPipeline': 300,
}

(6)爬虫编写

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from mycwpjt.items import MycwpjtItem

#显示可用的模板              scrapy genspider -l
#利用crawlspider创建的框架  scrapy genspider -t crawl weisun sohu.com
#开始爬取                   scrapy crawl weisun --nolog

class WeisunSpider(CrawlSpider):
    name = 'weisun'
    allowed_domains = ['sohu.com']
    start_urls = ['http://sohu.com/']

    rules = (
        # 新闻网页的url地址类似于:
        # “http://news.sohu.com/20160926/n469167364.shtml”
        # 所以可以得到提取的正则表达式为'.*?/n.*?shtml’
        Rule(LinkExtractor(allow=('.*?/n.*?shtml'), allow_domains=('sohu.com')), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        i = MycwpjtItem()
        #i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
        # 根据Xpath表达式提取新闻网页中的标题
        i["name"] = response.xpath("/html/head/title/text()").extract()
        # 根据Xpath表达式提取当前新闻网页的链接
        i["link"] = response.xpath("//link[@rel='canonical']/@href").extract()
        return i

     CrawlSpider是爬取那些具有一定规则网站的常用的爬虫,它基于Spider并有一些独特属性

  • rules: 是Rule对象的集合,用于匹配目标网站并排除干扰
  • parse_start_url: 用于爬取起始响应,必须要返回ItemRequest中的一个。

      因为rulesRule对象的集合,所以这里介绍一下Rule。它有几个参数:link_extractorcallback=None、              cb_kwargs=Nonefollow=Noneprocess_links=Noneprocess_request=None
     其中的link_extractor既可以自己定义,也可以使用已有LinkExtractor类,主要参数为:

  • allow:满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。
  • deny:与这个正则表达式(或正则表达式列表)不匹配的URL一定不提取。
  • allow_domains:会被提取的链接的domains。
  • deny_domains:一定不会被提取链接的domains。
  • restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。
三、结果显示


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

scrapy爬虫-------命令解析

scrapy是通过命令行进行控制的,你可以在命令行中输入一个scrapy,会出现一拍命令。 你也可以通过tree来查看scrapy的目录结构,scrapy.cfg存放的目录被认为是项目的根目录,该文...
  • djd1234567
  • djd1234567
  • 2015年05月22日 10:23
  • 3803

Scrapy实例1-爬取天气预报存储到Json

目标: 爬取天气网天气 目标链接: http://beijing.tianqi.com/我们依据上篇文章http://blog.csdn.net/co_zy/article/details/7718...
  • Co_zy
  • Co_zy
  • 2017年08月16日 08:48
  • 288

Scrapy系列教程(1)------命令行工具

默认的Scrapy项目结构 在开始对命令行工具以及子命令的探索前,让我们首先了解一下Scrapy的项目的目录结构。 虽然可以被修改,但所有的Scrapy项目默认有类似于下边的文件结构: scrap...
  • iloveyin
  • iloveyin
  • 2014年11月20日 10:52
  • 19101

【spider】之 Scrapy初次体验

基本结构: scrapy.cfg tutorial:    settings.py    pipelines.py    spiders/        demz_spider.py ...
  • Team77
  • Team77
  • 2016年02月19日 18:48
  • 941

Scrapy - 命令行工具

Scrapy是由scrapy命令行工具来控制的,它的命令行工具为多种用途提供了一些不同的命令,每一个命令都有不同的参数和选项。 一些Scrapy命令必须在Scrapy项目目录下执行,另一些可以在任何...
  • rossisy
  • rossisy
  • 2017年10月25日 19:44
  • 150

scrapy爬虫精要(1)

scrapy入门的一些总结
  • wk_Hanging
  • wk_Hanging
  • 2016年02月19日 07:35
  • 1064

Scrapy源码分析-常用的爬虫类-CrawlSpider(三)

CrawlSpider-爬取一般网站常用的spider。其定义了一些规则(rule)来提供跟进link的方便的机制。 也许该spider并不是完全适合您的特定网站或项目,但其对很多情况都使用。 因此您...
  • zq602316498
  • zq602316498
  • 2014年07月20日 09:22
  • 5415

网络爬虫之Scrapy实战三:爬取多个网页CrawlSpider

本文介绍了scrapy中CrawlSpider的用法
  • zhfcmx1
  • zhfcmx1
  • 2017年05月19日 23:14
  • 2144

scrapy自动多网页爬取CrawlSpider类(五)

一.目的。 自动多网页爬取,这里引出CrawlSpider类,使用更简单方式实现自动爬取。 二.热身。 1.CrawlSpider (1)概念与作用: 它是Spide...
  • u013378306
  • u013378306
  • 2016年11月03日 17:07
  • 2706

Scrapy研究探索(六)——自动爬取网页之II(CrawlSpider)

一.目的。 在教程(二)(http://blog.csdn.net/u012150179/article/details/32911511)中使用基于Spider实现了自己的w3cschool_spi...
  • u012150179
  • u012150179
  • 2014年06月26日 21:31
  • 38578
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Scrapy框架利用CrawlSpider创建自动爬虫
举报原因:
原因补充:

(最多只允许输入30个字)