scrapy爬虫系列之五--CrawlSpider的使用

功能点:CrawlSpider的基本使用

爬取网站:保监会

主要代码:

cf.py

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


class CfSpider(CrawlSpider):    # 继承自CrawlSpider
    """主要是介绍CrawlSpider的用法"""
    name = 'cf'
    allowed_domains = ['circ.gov.cn']
    # 第一次请求的url,如果有特殊需求,可以定义一个parse_start_url函数来处理这个url所对应的响应
    start_urls = ['http://circ.gov.cn/web/site0/tab5240/']

    rules = (
        # LinkExtractor 链接提取器,提取url地址
        # callback 可以没有
        # follow 当前url的响应是否重新经过rules来提取url
        # 注意点:
        # 1、两个Rule的callback解析函数,不能直接传递参数
        # 2、如果多个Rule都满足同一个url,会从rules中选择第一个满足的操作

        # 详情的url提取器
        Rule(LinkExtractor(allow=r'/web/site0/tab5240/infod+.htm'), callback='parse_item'),
        # 列表的url提取器
        Rule(LinkExtractor(allow=r'/web/site0/tab5240/module14430/paged+.htm'), follow=True),
    )

    # parse是发送url请求的,不能在此定义
    # 解析详情页
    def parse_item(self, response):
        item = {}
        # 通过正则匹配
        item["title"] = re.findall("<!--TitleStart-->(.*?)<!--TitleEnd-->", response.body.decode())[0]
        item["publish_time"]  = re.findall("发布时间:(20d{2}-d{2}-d{2})", response.body.decode())[0]
        print(item)
        print("*"*30)

    #     # 此处也可以接着构造请求
    #     yield scrapy.Request(
    #         url,
    #         callback=self.parse_detail,
    #         meta={"item": item}
    #     )
    #
    # # 构造其他属性
    # def parse_detail(self, response):
    #     item = response.meta["item"]
    #     item["price"] = 11
    #     yield item
原文地址:https://www.cnblogs.com/bookwed/p/10633734.html