•CrawlSpider它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则Rule来提供跟进链接的方便的机制,从爬取的网页结果中获取链接并继续爬取的工作. 创建爬虫文件的方式 scrapy genspider -t crawl 爬虫文件 域 爬虫文件继承的类 rule:里面存放的是Rule对象(元祖或列表) Rule:自定义提取规则,提取到的url会自动构建Request对象 设置回调函数解析响应结果,设置是否需要跟进(进一步提取url) process_links:拦截Rule规则提取的url,返回的是一个列表列表里面存放的是link对象 LinkExtractor:是一个对象,设置提取正则的url规则 注意:在Rule中没有设置callback回调,follow默认为True 注意:一定不要去实现parse方法 注意:要想处理起始url的响应结果,我们需要重写parse_start_url的方法 什么时候适合使用crawlspider: 1.网页结构比较简单 2.页面大多是静态文件 import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from chinazcrawlspider.items import ChinazcrawlspiderItem class ChinazSpider(CrawlSpider): name = 'chinaz' allowed_domains = ['chinaz.com'] start_urls = ['http://top.chinaz.com/hangyemap.html'] # 存放定制的获取连接规则对象(是一个列表或元祖) # 根据规则提取到所有的url,由crawlspider构建Request对象并交给引擎 """ LinkExtractor: 提取连接的规则(正则) # 常用 allow = ():设置允许提取的目标url deny=():设置不允许提取的目标url(优先级比allow高) allow_domains=():设置允许提取的url的域 deny_domains =():不允许提取的url的域(优先级比allow_domains高) restrict_xpaths=(): 根据xpath语法,定位到某一标签提取目标url unique=True:如果存在多个相同的url,只会保留一个 restrict_css=(): 根据css语法,定位到某一标签提取目标url strip=True: """ """ Rule link_extractor: Linkextractor对象 callback=None:设置回调函数 follow=None:是否设置跟进(下一页满足条件跟进) process_links:可设置回调函数, 对request对象拦截(标签下无法直接获取的url,拼接url锚点) """ rules = ( # Rule规则对象 # 分页地址 Rule( LinkExtractor( allow=r'http://top.chinaz.com/hangye/index_.*?.html', # 正则匹配URL restrict_xpaths=('//div[@class="Taright"]',# 匹配分类地址 '//div[@class="ListPageWrap"]')# 匹配分页地址 ), # xpath可设置范围,即在哪里匹配符合正则的url callback='parse_item', follow=True # 下一页页满足allow条件 ), ) # 在crawlspider中一定不要出现parse()方法 def parse_start_url(self,response): """ 如果想要对起始url的响应结果做处理的话,就需要回调这个方法 :param response: :return: """ self.parse_item def parse_item(self, response): """ 解析分页的网页数据 :param response: :return: """ webInfos = response.xpath('//ul[@class="listCentent"]/li') for webInfo in webInfos: web_item = ChinazcrawlspiderItem() # 封面图片 web_item['coverImage'] = webInfo.xpath('.//div[@class="leftImg"]/a/img/@src').extract_first('') # 标题 web_item['title'] = webInfo.xpath('.//h3[@class="rightTxtHead"]/a/text()').extract_first('') # 域名 web_item['domenis'] = webInfo.xpath( './/h3[@class="rightTxtHead"]/span[@class="col-gray"]/text()').extract_first('') # 周排名 web_item['weekRank'] = webInfo.xpath('.//div[@class="RtCPart clearfix"]/p[1]/a/text()').extract_first('') # 反连接数 web_item['ulink'] = webInfo.xpath('.//div[@class="RtCPart clearfix"]/p[4]/a/text()').extract_first('') # 网站简介 web_item['info'] = webInfo.xpath('.//p[@class="RtCInfo"]/text()').extract_first('') # 得分 web_item['score'] = webInfo.xpath('.//div[@class="RtCRateCent"]/span/text()').re('\d+')[0] # 排名 web_item['rank'] = webInfo.xpath('.//div[@class="RtCRateCent"]/strong/text()').extract_first('') print(web_item) yield web_item 作者:牛耀 链接:https://www.jianshu.com/p/d5066bb3bc9b
2019-01-06
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前言 最近一直想维护一个代理IP池,在网上找了三十多个免费提供代理IP的网站,想把这些代理都抓取下来存到本地数据库...
- Given a positive integern, find the least number of perfe...