'''
CrawlSpider它是Spider的派生類,Spider類的設(shè)計(jì)原則是只爬取start_url列表中的網(wǎng)頁(yè),而CrawlSpider類定義了一些規(guī)則Rule來(lái)提供跟進(jìn)鏈接的方便的機(jī)制,從爬取的網(wǎng)頁(yè)結(jié)果中獲取鏈接并繼續(xù)爬取的工作.
創(chuàng)建爬蟲(chóng)文件的方式
scrapy genspider -t crawl 爬蟲(chóng)文件 域
爬蟲(chóng)文件繼承的類
rule:里面存放的是Rule對(duì)象(元祖或列表)
Rule:自定義提取規(guī)則,提取到的url會(huì)自動(dòng)構(gòu)建Request對(duì)象
設(shè)置回調(diào)函數(shù)解析響應(yīng)結(jié)果,設(shè)置是否需要跟進(jìn)(進(jìn)一步提取url)
process_links:攔截Rule規(guī)則提取的url,返回的是一個(gè)列表列表里面存放的是link對(duì)象
LinkExtractor:是一個(gè)對(duì)象,設(shè)置提取正則的url規(guī)則
注意:在Rule中沒(méi)有設(shè)置callback回調(diào),follow默認(rèn)為True
注意:一定不要去實(shí)現(xiàn)parse方法
注意:要想處理起始url的響應(yīng)結(jié)果,我們需要重寫parse_start_url的方法
什么時(shí)候適合使用crawlspider:
1.網(wǎng)頁(yè)結(jié)構(gòu)比較簡(jiǎn)單
2.頁(yè)面大多是靜態(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ī)則對(duì)象(是一個(gè)列表或元祖)
# 根據(jù)規(guī)則提取到所有的url,由crawlspider構(gòu)建Request對(duì)象并交給引擎
"""
LinkExtractor: 提取連接的規(guī)則(正則)
# 常用
allow = ():設(shè)置允許提取的目標(biāo)url
deny=():設(shè)置不允許提取的目標(biāo)url(優(yōu)先級(jí)比allow高)
allow_domains=():設(shè)置允許提取的url的域
deny_domains =():不允許提取的url的域(優(yōu)先級(jí)比allow_domains高)
restrict_xpaths=(): 根據(jù)xpath語(yǔ)法,定位到某一標(biāo)簽提取目標(biāo)url
unique=True:如果存在多個(gè)相同的url,只會(huì)保留一個(gè)
restrict_css=(): 根據(jù)css語(yǔ)法,定位到某一標(biāo)簽提取目標(biāo)url
strip=True:
"""
"""
Rule
link_extractor: Linkextractor對(duì)象
callback=None:設(shè)置回調(diào)函數(shù)
follow=None:是否設(shè)置跟進(jìn)(下一頁(yè)滿足條件跟進(jìn))
process_links:可設(shè)置回調(diào)函數(shù),
對(duì)request對(duì)象攔截(標(biāo)簽下無(wú)法直接獲取的url,拼接url錨點(diǎn))
"""
rules = (
# Rule規(guī)則對(duì)象
# 分頁(yè)地址
Rule(
LinkExtractor(
allow=r'http://top.chinaz.com/hangye/index_.*?.html', # 正則匹配URL
restrict_xpaths=('//div[@class="Taright"]',# 匹配分類地址
'//div[@class="ListPageWrap"]')# 匹配分頁(yè)地址
), # xpath可設(shè)置范圍,即在哪里匹配符合正則的url
callback='parse_item',
follow=True # 下一頁(yè)頁(yè)滿足allow條件
),
)
# 在crawlspider中一定不要出現(xiàn)parse()方法
def parse_start_url(self,response):
"""
如果想要對(duì)起始url的響應(yīng)結(jié)果做處理的話,就需要回調(diào)這個(gè)方法
:param response:
:return:
"""
self.parse_item
def parse_item(self, response):
"""
解析分頁(yè)的網(wǎng)頁(yè)數(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('')
# 標(biāo)題
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)站簡(jiǎn)介
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
Scrapy通用爬蟲(chóng)--CrawlSpider
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- CrawlSpider它是Spider的派生類,Spider類的設(shè)計(jì)原則是只爬取start_url列表中的網(wǎng)頁(yè),而...
- CrawlSpider它是Spider的派生類,Spider類的設(shè)計(jì)原則是只爬取start_url列表中的網(wǎng)頁(yè),而...
- 一、通用爬蟲(chóng) 通用爬蟲(chóng)一般有以下通用特性: 爬取大量(一般來(lái)說(shuō)是無(wú)限)的網(wǎng)站而不是特定的一些網(wǎng)站。不會(huì)將整個(gè)網(wǎng)站都...
- 什么是scrapy通用爬蟲(chóng) CrawlSpider它是Spider的派生類,Spider類的設(shè)計(jì)原則是只爬取sta...
- 通過(guò)前面兩章的熟悉,這里開(kāi)始實(shí)現(xiàn)具體的爬蟲(chóng)代碼 廣西人才網(wǎng) 以廣西人才網(wǎng)為例,演示基礎(chǔ)爬蟲(chóng)代碼實(shí)現(xiàn),邏輯: 配置R...