1. 程式人生 > >scrapy爬蟲系列之五--CrawlSpider的使用

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

actor time col 操作 rule lsp -c cal link

功能點: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的使用