crawlspider的使用
- scrapy startproject 项目名
- scrapy genspider -t crawl 爬虫名 allow_domain
- 指定start_url,对应的响应会通过rules提取url地址
- 完善rules,添加Rule
注意点:
- url地址不完整,crawlspider会自带补全后请求
- parse函数不能定义,它有特殊功能,用于url的提取
- callback:连接提取器提取出来的url地址对应的响应交给他处理
- follow:连接提取器提取处理的url地址对应的响应是否继续被rules过滤
# -*- coding:utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider,Rule
class CfSpider(CrawlSpider):
name = 'cf'
allowed_domains=['circ.gov.cn']
start_urls = ['http://circ.gov.cn/']
#定义提取url地址规则
rules = (
#LinkExtractor 连接提取器,提取url地址
#callback 提取出来的url地址的response会交给callback处理
#follow 当前url地址的响应是否重新通过rules来提取url地址
Rule(LinkExtractor(allow=r'Itmes/',callback='parse_item',follow=True),
Rule(LinkExtractor(allow=r'Itmes/',callback='parse_item',follow=True)
)
#parse函数有特殊功能,不能定义
def parse_item(self,response):
i={}
return i
LinkExtractor更多参数
- allow:满足括号中正则表达式的url会被提取,如果为空,则全部匹配
- deny:满足括号中正则表达式的url一定不会被提取(优先级高于allow)
- allow_domains:会被提取的链接的domains
- deny_domains:一定不会被提取链接的domains
- restrict_xpaths:使用xpath正则表达式,和allow共同作用过滤链接,即xpath满足范围内的url地址会被提取
Spiders.Rule常见参数
- link_extractor:是一个Link Extractor对象,用于定义需要提取的链接
- callback:从link_extractor中每获取到链接时,参数所指定的值作为回调函数
- follow:是否跟进从response中提取的符合规则的链接
- process_links:指定该spider中哪个函数会被调用,从link_extractor中获取到链接列表时会调用该函数,该方法主要用来过滤url
- process_request:指定该spider中哪个函数会被调用,该规则提取到每个requests时都会调用该函数,用来过滤request