crawlspider的常见操作

创建项目

scrapy startproject 项目名称

模板创建

scrapy genspider -t crawl 模板名称 域名

CrawlSpider继承于Spider类,除了继承过来的属性外(name、allow_domains),还提供了新的属性和方法:

LinkExtractors

class scrapy.linkextractors.LinkExtractor

每个LinkExtractor有唯一的公共方法是 extract_links(),它接收一个 Response 对象,并返回一个 scrapy.link.Link 对象。
Link Extractors要实例化一次,并且 extract_links 方法会根据不同的 response 调用多次提取链接。

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

rules

rules包含了一个或多个连接对象,每个rule对爬取网站的规则做了特定的操作
rles中的主要参数link_extractor:是一个Link Extractor对象,用于定义需要提取的链接。
callback: 从link_extractor中每获取到链接时,参数所指定的值作为回调函数,该回调函数接受一个response作为其第一个参数。

 注意:当编写爬虫规则时,避免使用parse作为回调函数。由于CrawlSpider使用
                 
 parse方法来实现其逻辑,如果覆盖了 parse方法,crawl spider将会运行失败。

  follow:是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否

需要跟进。 如果callback为None,follow 默认设置为True ,否则默认为False。

案例


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


class DemoSpider(CrawlSpider):
    name = 'demo'
    allowed_domains = ['foods1.com']
  #初始url
    start_urls = ['http://www.foods1.com/sort?sort=AAA&st=product&page=1']

    rules = (
        获取下一页链接
        Rule(LinkExtractor(restrict_xpaths=u"//a[text()='»']"), callback='parse_item', follow=True),
        获取详情页链接
        Rule(LinkExtractor(restrict_xpaths="//div[@class='bt_zi']/a"), callback='parse_info', follow=True),
    )

    def parse_item(self, response):
        title=response.xpath("//div[@class='bt_zi']/a/text()").extract().extract()#提取目标数据
        for x in title:
            print "--------------",x(Python2中输入括号会变成uncode编码)
    def parse_info(self,response):
        name=response.xpath("//div[@class='name_bt']/text()").extract()[0]
        print name

你可能感兴趣的:(crawlspider的常见操作)