通常抓取过的url不重复抓取,那么就须要记录url,判断当前URL若是在记录里说明已经抓取过了,若是不存在说明没抓取过web
记录url能够是缓存,或者数据库,若是保存数据库按照如下方式:数据库
id URL加密(建索引以便查询) 原始URL缓存
保存URL表里应该至少有以上3个字段
一、URL加密(建索引以便查询)字段:用来查询这样速度快,
二、原始URL,用来给加密url作对比,防止加密不一样的URL出现一样的加密值dom
自动递归urlscrapy
# -*- coding: utf-8 -*- import scrapy #导入爬虫模块 from scrapy.selector import HtmlXPathSelector #导入HtmlXPathSelector模块 from scrapy.selector import Selector class AdcSpider(scrapy.Spider): name = 'adc' #设置爬虫名称 allowed_domains = ['hao.360.cn'] start_urls = ['https://hao.360.cn/'] def parse(self, response): #这里作页面的各类获取以及处理 #递归查找url循环执行 hq_url = Selector(response=response).xpath('//a/@href') #查找到当前页面的全部a标签的href,也就是url for url in hq_url: #循环url yield scrapy.Request(url=url, callback=self.parse) #每次循环将url传入Request方法进行继续抓取,callback执行parse回调函数,递归循环 #这样就会递归抓取url而且自动执行了,可是须要在settings.py 配置文件中设置递归深度,DEPTH_LIMIT=3表示递归3层
这样就会递归抓取url而且自动执行了,可是须要在settings.py 配置文件中设置递归深度,DEPTH_LIMIT=3表示递归3层ide