功能点: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