摘要:前者更好用,取不到就返回,后者取不到就一個錯誤。發現使用得到的是一個對象實例所以是對象實例的方法繼續使用,觀察區別彼女制服著替。彼女制服著替。發現對于類型的對象,并不能使用方法,而使用可以文末附官方文檔鏈接鏈接官方教程關于方法
開篇明義:get() 、getall() 是新版本的方法,extract() 、extract_first()是舊版本的方法。
前者更好用,取不到就返回None,后者取不到就raise一個錯誤。
推薦使用新方法,官方文檔中也都改用前者了
看官方文檔(鏈接附在文末),看到了關于get()、get()方法的使用,查閱網絡沒有資料,那就自己記錄一下。
y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~y( ˙?. )耶~
先說結論:
對于scrapy.selector.unified.SelectorList對象,getall()==extract(),get()==extract_first()
對于scrapy.selector.unified.Selector對象,getall()==extract(),get()!=extract_first()
使用scrapy shell 進行測試
scrapy shell https://gavbus668.com/
得到如下結果:
皆是常規操作
返回html的前200個字符,看看沒有發生錯誤
response.text[:200]
得到:
Out[3]: "rnrn rn rn rnbingo
繼續,使用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發現使用Selector得到的是一個SelectorList對象實例
所以get() 、getall() 、extract() 、extract_first()是SelectorList對象實例的方法
繼續使用get() 、getall() 、extract() 、extract_first(),觀察區別:
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,總結一下:
對于scrapy.selector.unified.SelectorList對象
get() == extract_first()
返回的是一個list,里面包含了多個string,如果只有一個string,則返回["我很孤獨"]這樣的形式
getall() == extract()
返回的是string,list里面第一個stringextract_first()與get()有區別與Selector對象有關
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]: 發現:對于Selector類型的對象,并不能使用extract_first()方法,而使用get()可以
文末附官方文檔鏈接鏈接
Scrapy官方教程——關于get()、getall()方法
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43396.html
摘要:注意爬豆爬一定要加入選項,因為只要解析到網站的有,就會自動進行過濾處理,把處理結果分配到相應的類別,但偏偏豆瓣里面的為空不需要分配,所以一定要關掉這個選項。 本課只針對python3環境下的Scrapy版本(即scrapy1.3+) 選取什么網站來爬取呢? 對于歪果人,上手練scrapy爬蟲的網站一般是官方練手網站 http://quotes.toscrape.com 我們中國人,當然...
摘要:圖片下載和拿到下載后的路徑小封面圖的爬取,后面通過傳到中詳情頁的爬取詳情頁的完整地址下一頁的爬取與請求不明打開功能注意如要進一步定制功能補充新建 圖片下載和拿到下載后的路徑 1 items.py import scrapy class InfoItem(scrapy.Item): url = scrapy.Field() url_object_id = scrapy....
摘要:最近這兩周在忙著給公司爬一點數據,更文的速度有一點下降,預計今天就爬完了,總結總結經驗。一個爬蟲的框架?;镜葍r于選擇其中的文字提取屬性文檔,這個我不會,我也沒看使用這個類庫解析如請求方式可以用來給中文字符數據放入傳遞即可。 最近這兩周在忙著給公司爬一點數據,更文的速度有一點下降,預計今天就爬完了,總結總結經驗。 其實之前我司是有專門做爬蟲的,不用前端這邊出人干活。后來那人離職了,有可...
摘要:最近這兩周在忙著給公司爬一點數據,更文的速度有一點下降,預計今天就爬完了,總結總結經驗。一個爬蟲的框架?;镜葍r于選擇其中的文字提取屬性文檔,這個我不會,我也沒看使用這個類庫解析如請求方式可以用來給中文字符數據放入傳遞即可。 最近這兩周在忙著給公司爬一點數據,更文的速度有一點下降,預計今天就爬完了,總結總結經驗。 其實之前我司是有專門做爬蟲的,不用前端這邊出人干活。后來那人離職了,有可...
閱讀 1961·2021-09-09 09:33
閱讀 1107·2019-08-30 15:43
閱讀 2646·2019-08-30 13:45
閱讀 3297·2019-08-29 11:00
閱讀 845·2019-08-26 14:01
閱讀 3559·2019-08-26 13:24
閱讀 471·2019-08-26 11:56
閱讀 2683·2019-08-26 10:27