閱讀本篇大概需要 4 分鐘亚享。
本來這篇是要接著之前 Python 基礎的咽块,但由于基礎講的太多,真的會很累欺税。所以先暫停一兩篇關于 Python 基礎的分享侈沪。這篇分享一些有意思的東西揭璃。
今天我在 Github 上創(chuàng)建了一個組織,名叫「SpiderMan」
這個組織的目的是玩轉 Python 爬蟲亭罪,目前其中有一個項目就是昨天我提到的 “什么值得買” 這個平臺的爬蟲瘦馍。
目前有三個讀者聯系到我了,我初步了解了下有一個是爬蟲高手 A应役,另外兩個 B 和 C 是有一定 Python 基礎情组,但在爬蟲方面還是初次。不過我對他們都是同樣的看待箩祥,我們建了一個微信群他們有問題都會拋出來院崇。其次我也會去主動問他們某個知識點是否了解,比如今天要提到的 Scrapy Shell袍祖。除了剛才提到的 A 會底瓣, B 和 C 對這個只是聽到過。所以我就把這個知識點在這里安利下蕉陋。(當然濒持,有興趣加入組織的可以在后臺或者 Github Issues 里面聯系我)
Scrapy Shell 是什么?
你可以把這個理解為 Python 爬蟲的一個測試工具寺滚。提到爬蟲,我們最常見就是提取 HTML 中某個標簽下的數據屈雄,但在提取之前我們需要找到這個標簽位置村视,這個位置在學術上就是 XPath。
大家都知道 HTML 的頁面是 XML 格式的酒奶,在 XML 中需要定位到某個標簽的話就需要有個路徑蚁孔。所以你就可以把 XPath 理解為 XML 中某個標簽的路徑,比如從 html 標簽到 a 標簽的內容惋嚎。
舉個實際的簡單例子杠氢,我們來找找 “什么值得買” 官網頁面的 Logo 所在的 Xpath 路徑:
1.在 FireFox 中打開“什么值得買”的官網
2.在當前頁面點擊鼠標右鍵,并選中 “查看元素”
3.選中之后另伍,會展示如下界面鼻百,然后選中工具欄的左上角 箭頭按鈕,選中之后就可以用鼠標點擊頁面上的任意內容摆尝,比如我這里點擊 Logo
看到圖片最底部會出現一個路徑温艇,這就是 Logo 在 xml 中的路徑《楣可以看到 html->body......-> img 就是 這個 Logo 的 XPath勺爱。其中每個路徑主要分為三段,第一段是標簽名讯检,第二段 # 后面的是當前標簽的 id 琐鲁,第三段 . 后面的是標簽的 class 名卫旱。那么這個 XPath 就可以這么寫:
有了這個 Xpath,我們就可以通過寫 Python 的代碼去拿到這個標簽的數據围段,一般我們會用到 Scrapy 框架來做這件事顾翼。這篇文章暫不分享 Scrapy 框架,不了解的可以看
那么暴构,我們如何在不寫代碼的情況下去校驗這段 XPath 是否能拿到標簽數據呢?
這時候我們就需要用到 Scrapy Shell 來測試這個 XPath 路徑到底能不能拿到這個 Logo 圖片的地址段磨。
命令:
scrapy shell 'url 地址'
? /Users/xiyouMc > scrapy shell 'https://www.smzdm.com'>>> response.xpath('/html/body/header[@id="header"]/div[@id="global-search"]/div[@class="search-inner z-clearfix"]/h1[@id="logo"]/a/img/@src')[<Selector xpath='/html/body/header[@id="header"]/div[@id="global-search"]/div[@class="search-inner z-clearfix"]/h1[@id="logo"]/a/img/@src' data=u'https://res.smzdm.com/pc/v1.0/dist/img/a'>]
(看不清的取逾,可以在瀏覽器打開)
然后我們通過 reponse.xpath() 來拿到這個路徑下的標簽數據。不過這時候拿到的還是一個 Selector 對象,要拿到準確的數據我們在后面加上 extract()
>>> response.xpath('/html/body/header[@id="header"]/div[@id="global-search"]/div[@class="search-inner z-clearfix"]/h1[@id="logo"]/a/img/@src').extract()[u'https://res.smzdm.com/pc/v1.0/dist/img/activity/17double11/double11gif.gif']>>>
這樣我們就通過Scrapy Shell 來拿到了 XPath 的標簽數據苹支。當然砾隅,這只是爬蟲的第一步,不過這也算是爬蟲中最關鍵的一步债蜜。
預告下晴埂,下周我可能會在某天晚上直播一場從零開始的一個爬蟲項目,敬請期待寻定。
有興趣加入這個組織的可以加我微信 'mcx1469' 儒洛,也可以在我的 Github 倉庫的 Issues 中提一些,地址: