scrapy爬蟲系列之五--CrawlSpider的使用
阿新 • • 發佈:2019-04-01
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的使用