這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何實(shí)現(xiàn)URL字段的解析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站專注于南丹網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供南丹營(yíng)銷型網(wǎng)站建設(shè),南丹網(wǎng)站制作、南丹網(wǎng)頁(yè)設(shè)計(jì)、南丹網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造南丹網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供南丹網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
我們知道如果想要爬取網(wǎng)站的數(shù)據(jù)需要在spiders文件中創(chuàng)建一個(gè)蜘蛛,創(chuàng)建后這個(gè)蜘蛛中會(huì)自動(dòng)生成一個(gè)類,類名也是由蜘蛛名加Spider組成,如上一節(jié)中爬去csdn網(wǎng)站生成的:CsDNSpider
類,這個(gè)類中的name
也就是蜘蛛的名稱,allowed_domains
是允許爬取網(wǎng)站的域名,start_urls
是需要爬取的目標(biāo)網(wǎng)站的網(wǎng)址,如果需要更改爬取的目標(biāo)頁(yè)面,只需要修改start_urls
就可以了;
import scrapy class CsdnSpider(scrapy.Spider): name = 'csdn' allowed_domains = ['www.csdn.net'] start_urls = ['http://www.csdn.net/'] def parse(self, response): pass
那我們繼續(xù)用csdn的今天推薦作為爬取信息,首先需要在CsdnSpider類中的parse(self,response)
方法中使用response對(duì)象來(lái)對(duì)css選擇器獲取到的a元素的href值進(jìn)行解析,如response.css('h3 a::attr(href)').extract()
,這樣就可以得到一個(gè)url地址的列表;
import scrapy class CsdnSpider(scrapy.Spider): name = 'csdn' allowed_domains = ['www.csdn.net'] start_urls = ['http://www.csdn.net/'] def parse(self, response): urls = response.css('.company_list .company_name a::attr(href)').extract() print(urls)
接著我們循環(huán)得到的列表,拿到每一個(gè)a標(biāo)簽的url地址,然后使用Request請(qǐng)求,需要傳遞兩個(gè)參數(shù),一個(gè)是url用于告訴我們接下來(lái)解析哪個(gè)頁(yè)面,可以通過parse.urljoin()
方法拼接頁(yè)面鏈接,另一個(gè)是callback回調(diào)函數(shù)。
這個(gè)回調(diào)函數(shù)是我們自己定義的,也會(huì)傳遞一個(gè)response對(duì)象,通過這個(gè)response對(duì)象對(duì)css選擇器獲取的元素進(jìn)行解析,這樣我們就可以拿到每個(gè)解析頁(yè)面的標(biāo)題內(nèi)容了;
import scrapy from scrapy.http import Request from urllib import parse class CsdnSpider(scrapy.Spider): name = 'csdn' allowed_domains = ['www.csdn.net'] start_urls = ['http://www.csdn.net/'] def parse(self, response): # 獲取url urls = response.css('.company_list .company_name a::attr(href)').extract() # print(urls) # 解析頁(yè)面 for url in urls: yield Request(url = parse.urljoin(response.url, url), callback=self.parse_analyse, dont_filter=True) # 回調(diào)函數(shù) def parse_analyse(self, response): title = response.css('.company_list .company_name a::text').extract_first() print(title)
class scrapy.http.Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8',priority=0, dont_filter=False, errback])
,一個(gè)request對(duì)象代表一個(gè)HTTP請(qǐng)求,通常由Spider產(chǎn)生,經(jīng)Downloader執(zhí)行從而產(chǎn)生一個(gè)Response;
url
:用于請(qǐng)求的URL;
callback
:指定一個(gè)回調(diào)函數(shù),該回調(diào)函數(shù)以這個(gè)request是的response作為第一個(gè)參數(shù),如果未指定callback則默認(rèn)使用spider的parse()方法;
method
: HTTP請(qǐng)求的方法,默認(rèn)為GET;
headers
:請(qǐng)求的頭部;
body
:請(qǐng)求的正文,可以是bytes或者str;
cookies
:請(qǐng)求攜帶的cookie;
meta
:指定Request.meta屬性的初始值,如果給了該參數(shù),dict將會(huì)淺拷貝;
encoding
:請(qǐng)求的編碼, 默認(rèn)為utf-8;
priority
:優(yōu)先級(jí),優(yōu)先級(jí)越高,越先下載;
dont_filter
:指定該請(qǐng)求是否被 Scheduler過濾,該參數(shù)可以使request重復(fù)使用;
errback
:處理異常的回調(diào)函數(shù);
上述就是小編為大家分享的如何實(shí)現(xiàn)URL字段的解析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。