功能点:CrawlSpider的基本使用
爬取网站:保监会
主要代码:
cf.py
# -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule import reclass 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