?CrawlSpider它是Spider的派生類,Spider類的設計原則是只爬取start_url列表中的網(wǎng)頁,而CrawlSpider類定義了一些規(guī)則Rule來提供跟進鏈接的方便的機制,從爬取的網(wǎng)頁結果中獲取鏈接并繼續(xù)爬取的工作. 創(chuàng)建爬蟲文件的方式 scrapy genspider -t crawl 爬蟲文件 域 爬蟲文件繼承的類 rule:里面存放的是Rule對象(元祖或列表) Rule:自定義提取規(guī)則,提取到的url會自動構建Request對象 設置回調函數(shù)解析響應結果,設置是否需要跟進(進一步提取url) process_links:攔截Rule規(guī)則提取的url,返回的是一個列表列表里面存放的是link對象 LinkExtractor:是一個對象,設置提取正則的url規(guī)則 注意:在Rule中沒有設置callback回調,follow默認為True 注意:一定不要去實現(xiàn)parse方法 注意:要想處理起始url的響應結果,我們需要重寫parse_start_url的方法 什么時候適合使用crawlspider: 1.網(wǎng)頁結構比較簡單 2.頁面大多是靜態(tài)文件 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'] # 存放定制的獲取連接規(guī)則對象(是一個列表或元祖) # 根據(jù)規(guī)則提取到所有的url,由crawlspider構建Request對象并交給引擎 """ LinkExtractor: 提取連接的規(guī)則(正則) # 常用 allow = ():設置允許提取的目標url deny=():設置不允許提取的目標url(優(yōu)先級比allow高) allow_domains=():設置允許提取的url的域 deny_domains =():不允許提取的url的域(優(yōu)先級比allow_domains高) restrict_xpaths=(): 根據(jù)xpath語法,定位到某一標簽提取目標url unique=True:如果存在多個相同的url,只會保留一個 restrict_css=(): 根據(jù)css語法,定位到某一標簽提取目標url strip=True: """ """ Rule link_extractor: Linkextractor對象 callback=None:設置回調函數(shù) follow=None:是否設置跟進(下一頁滿足條件跟進) process_links:可設置回調函數(shù), 對request對象攔截(標簽下無法直接獲取的url,拼接url錨點) """ rules = ( # Rule規(guī)則對象 # 分頁地址 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中一定不要出現(xiàn)parse()方法 def parse_start_url(self,response): """ 如果想要對起始url的響應結果做處理的話,就需要回調這個方法 :param response: :return: """ self.parse_item def parse_item(self, response): """ 解析分頁的網(wǎng)頁數(shù)據(jù) :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('') # 反連接數(shù) web_item['ulink'] = webInfo.xpath('.//div[@class="RtCPart clearfix"]/p[4]/a/text()').extract_first('') # 網(wǎng)站簡介 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 作者:牛耀 鏈接:http://www.itdecent.cn/p/d5066bb3bc9b
2019-01-06
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 前言 最近一直想維護一個代理IP池,在網(wǎng)上找了三十多個免費提供代理IP的網(wǎng)站,想把這些代理都抓取下來存到本地數(shù)據(jù)庫...
- (代碼文件鏈接見第六點) 1.實驗目的 本次實驗是為了掌握scrapy爬取層級網(wǎng)站信息的技巧。 2.實驗要求 使用...
- Given a positive integern, find the least number of perfe...
- 這是一個悲傷且愚蠢且非常非常愚蠢的故事…… 我小妹兒昨天放學回家發(fā)現(xiàn)作業(yè)沒帶回來,欲去學校取。 自己靈機一動,遂讓...