摘要:前者更好用,取不到就返回,后者取不到就一個(gè)錯(cuò)誤。發(fā)現(xiàn)使用得到的是一個(gè)對(duì)象實(shí)例所以是對(duì)象實(shí)例的方法繼續(xù)使用,觀察區(qū)別彼女制服著替。彼女制服著替。發(fā)現(xiàn)對(duì)于類型的對(duì)象,并不能使用方法,而使用可以文末附官方文檔鏈接鏈接官方教程關(guān)于方法
開(kāi)篇明義:get() 、getall() 是新版本的方法,extract() 、extract_first()是舊版本的方法。
前者更好用,取不到就返回None,后者取不到就raise一個(gè)錯(cuò)誤。
推薦使用新方法,官方文檔中也都改用前者了
看官方文檔(鏈接附在文末),看到了關(guān)于get()、get()方法的使用,查閱網(wǎng)絡(luò)沒(méi)有資料,那就自己記錄一下。
y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~
先說(shuō)結(jié)論:
對(duì)于scrapy.selector.unified.SelectorList對(duì)象,getall()==extract(),get()==extract_first()
對(duì)于scrapy.selector.unified.Selector對(duì)象,getall()==extract(),get()!=extract_first()
使用scrapy shell 進(jìn)行測(cè)試
scrapy shell https://gavbus668.com/
得到如下結(jié)果:
皆是常規(guī)操作
返回html的前200個(gè)字符,看看沒(méi)有發(fā)生錯(cuò)誤
response.text[:200]
得到:
Out[3]: "rnrn rn rn rnbingo
繼續(xù),使用Scrapy Selector下一步操作
In [5]: response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()")Out[5]:
[,
,
,
] In [10]: type(response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()"))Out[10]: scrapy.selector.unified.SelectorList發(fā)現(xiàn)使用Selector得到的是一個(gè)SelectorList對(duì)象實(shí)例
所以get() 、getall() 、extract() 、extract_first()是SelectorList對(duì)象實(shí)例的方法
繼續(xù)使用get() 、getall() 、extract() 、extract_first(),觀察區(qū)別:
In [6]: response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()").get()Out[6]: "DNW-025 彼女が制服に著替えたら。5"In [7]: response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()").getall()Out[7]: ["DNW-025 彼女が制服に著替えたら。5", "rntttttt", "rntttttt", " / "]In [8]: response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()").extract()Out[8]: ["DNW-025 彼女が制服に著替えたら。5", "rntttttt", "rntttttt", " / "]In [9]: response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()").extract_first()Out[9]: "DNW-025 彼女が制服に著替えたら。5"over,總結(jié)一下:
對(duì)于scrapy.selector.unified.SelectorList對(duì)象
get() == extract_first()
返回的是一個(gè)list,里面包含了多個(gè)string,如果只有一個(gè)string,則返回["我很孤獨(dú)"]這樣的形式
getall() == extract()
返回的是string,list里面第一個(gè)stringextract_first()與get()有區(qū)別與Selector對(duì)象有關(guān)
In [17]: type(response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()")) Out[17]: scrapy.selector.unified.SelectorList In [18]: type(response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0]) Out[18]: scrapy.selector.unified.Selector In [19]: response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0].get() Out[19]: "DNW-025 彼女が制服に著替えたら。5" In [20]: response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0].getall() Out[20]: ["DNW-025 彼女が制服に著替えたら。5"] In [21]: response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0].extract() Out[21]: "DNW-025 彼女が制服に著替えたら。5" In [22]: response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0].extract_first() --------------------------------------------------------------------------- AttributeError Traceback (most recent call last)in ----> 1 response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0].extract_first() AttributeError: "Selector" object has no attribute "extract_first" In [23]: response.xpath("http://*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0] Out[23]: 發(fā)現(xiàn):對(duì)于Selector類型的對(duì)象,并不能使用extract_first()方法,而使用get()可以
文末附官方文檔鏈接鏈接
Scrapy官方教程——關(guān)于get()、getall()方法
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43396.html
摘要:注意爬豆爬一定要加入選項(xiàng),因?yàn)橹灰馕龅骄W(wǎng)站的有,就會(huì)自動(dòng)進(jìn)行過(guò)濾處理,把處理結(jié)果分配到相應(yīng)的類別,但偏偏豆瓣里面的為空不需要分配,所以一定要關(guān)掉這個(gè)選項(xiàng)。 本課只針對(duì)python3環(huán)境下的Scrapy版本(即scrapy1.3+) 選取什么網(wǎng)站來(lái)爬取呢? 對(duì)于歪果人,上手練scrapy爬蟲的網(wǎng)站一般是官方練手網(wǎng)站 http://quotes.toscrape.com 我們中國(guó)人,當(dāng)然...
摘要:圖片下載和拿到下載后的路徑小封面圖的爬取,后面通過(guò)傳到中詳情頁(yè)的爬取詳情頁(yè)的完整地址下一頁(yè)的爬取與請(qǐng)求不明打開(kāi)功能注意如要進(jìn)一步定制功能補(bǔ)充新建 圖片下載和拿到下載后的路徑 1 items.py import scrapy class InfoItem(scrapy.Item): url = scrapy.Field() url_object_id = scrapy....
摘要:幾個(gè)朋友對(duì)爬蟲很感興趣,他們也都是開(kāi)發(fā)人員,一個(gè)開(kāi)發(fā)兩個(gè)開(kāi)發(fā),都沒(méi)有過(guò)項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn),正好其中一個(gè)最近要爬一個(gè)網(wǎng)店的產(chǎn)品信息,所以希望我能拿這網(wǎng)站當(dāng)寫一個(gè)爬蟲來(lái)給他們參考學(xué)習(xí)。我們就在這個(gè)文件里開(kāi)發(fā)爬蟲的相關(guān)邏輯。 幾個(gè)朋友對(duì)爬蟲很感興趣,他們也都是開(kāi)發(fā)人員,一個(gè)PHP開(kāi)發(fā)兩個(gè)JAVA開(kāi)發(fā),都沒(méi)有過(guò)python項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn),正好其中一個(gè)最近要爬一個(gè)網(wǎng)店的產(chǎn)品信息,所以希望我能拿這網(wǎng)站當(dāng)d...
摘要:最近這兩周在忙著給公司爬一點(diǎn)數(shù)據(jù),更文的速度有一點(diǎn)下降,預(yù)計(jì)今天就爬完了,總結(jié)總結(jié)經(jīng)驗(yàn)。一個(gè)爬蟲的框架?;镜葍r(jià)于選擇其中的文字提取屬性文檔,這個(gè)我不會(huì),我也沒(méi)看使用這個(gè)類庫(kù)解析如請(qǐng)求方式可以用來(lái)給中文字符數(shù)據(jù)放入傳遞即可。 最近這兩周在忙著給公司爬一點(diǎn)數(shù)據(jù),更文的速度有一點(diǎn)下降,預(yù)計(jì)今天就爬完了,總結(jié)總結(jié)經(jīng)驗(yàn)。 其實(shí)之前我司是有專門做爬蟲的,不用前端這邊出人干活。后來(lái)那人離職了,有可...
摘要:最近這兩周在忙著給公司爬一點(diǎn)數(shù)據(jù),更文的速度有一點(diǎn)下降,預(yù)計(jì)今天就爬完了,總結(jié)總結(jié)經(jīng)驗(yàn)。一個(gè)爬蟲的框架?;镜葍r(jià)于選擇其中的文字提取屬性文檔,這個(gè)我不會(huì),我也沒(méi)看使用這個(gè)類庫(kù)解析如請(qǐng)求方式可以用來(lái)給中文字符數(shù)據(jù)放入傳遞即可。 最近這兩周在忙著給公司爬一點(diǎn)數(shù)據(jù),更文的速度有一點(diǎn)下降,預(yù)計(jì)今天就爬完了,總結(jié)總結(jié)經(jīng)驗(yàn)。 其實(shí)之前我司是有專門做爬蟲的,不用前端這邊出人干活。后來(lái)那人離職了,有可...
閱讀 1986·2021-09-09 09:33
閱讀 1116·2019-08-30 15:43
閱讀 2669·2019-08-30 13:45
閱讀 3309·2019-08-29 11:00
閱讀 859·2019-08-26 14:01
閱讀 3573·2019-08-26 13:24
閱讀 484·2019-08-26 11:56
閱讀 2692·2019-08-26 10:27