首页 > 其他 > 详细

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

时间:2019-03-31 22:50:49      阅读:130      评论:0      收藏:0      [点我收藏+]

功能点: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/info\d+\.htm), callback=parse_item),
        # 列表的url提取器
        Rule(LinkExtractor(allow=r/web/site0/tab5240/module14430/page\d+\.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("发布时间:(20\d{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

 

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

原文:https://www.cnblogs.com/bookwed/p/10633734.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!