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