【爬蟲計劃】Scrapy框架的學習及跟課學習 | csdn_Part 03 Selector選擇器

接着上篇存儲到本地文件後,對於規則與爬取對象的選取這部分工作放到了Selector選擇器部分,可以理解爲對於目標的解析方法。

本節關鍵詞:直接使用 | xpath | 正則匹配 | CSS

1.直接使用

對於這部分,使用一個小demo演示,在命令行處執行發現直接跳轉到編譯器pycharm,於是就用pycharm來運行了。代碼在下自取:

# encoding:UTF-8
'''
爲了檢驗Selector直接使用的用法
'''

from scrapy import Selector

content = '<html><head><h3>hello world</h3><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="theme-color" content="#2932e1"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /><link rel="search" type="application/opensearchdescription+xml" href="/content-search.xml" title="百度搜索" /><link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu_85beaf5496f291521eb75ba38eacbd87.svg"><link rel="dns-prefetch" href="//dss0.bdstatic.com"/><link rel="dns-prefetch" href="//dss1.bdstatic.com"/><link rel="dns-prefetch" href="//ss1.bdstatic.com"/><link rel="dns-prefetch" href="//sp0.baidu.com"/><link rel="dns-prefetch" href="//sp1.baidu.com"/><link rel="dns-prefetch" href="//sp2.baidu.com"/><title>百度一下,你就知道</title>'

selector = Selector(text=content)
print(selector.xpath('/html/heal/title/text()').extract_first())
print(selector.css("h3::text").extract_first())
print("text")

在演示過程中,使用的是【文件名加後綴名】 後直接回車的方式直接運行,經測試並沒有輸出結果,直接打開了編譯器,所以轉向編譯器:

 其text部分的輸出測試是爲了排除匹配不成功,沒有獲取到結果所以沒有輸出的結果,考慮直接執行,編譯的仍然是python文件,猜想是因爲沒有設置默認編譯py文件,這裏貼出在pycharm中運行成功的截圖,繼續往後走:

 進入shell中發現,使用命令後出現上一個文件執行結果,並且對baidu網頁進行採集:

scrapy shell https:www.baidu.com

採集結束後進入shell模式,可以使用兩條命令查看採集網頁狀態碼及url:

response.status

response.url

 針對百度網頁的selector用法分別獲取到html-head-title下的文本信息,其中extract( )、extract_first( )兩個函數分別取出其中文本信息和列表中首條信息(下個部分對於xpath方法這部分有具體講解),因此獲取結果不同:

繼續對網頁進行提取操作,例如對所有a標籤的提取文本和超鏈接: 

2.XPath選擇器

講完直接選擇器,開始對xpath方法進行講解,其中xpath方法和另三種extract*類方法的功能如下:

講完理論照例,使用一個例子來說明xpath的具體用法,這次下手的是taobao網頁(參照上面shell+網址命令,將網址換成 https://www.taobao.com/tbhome/page/special-markets),繼續採集工作,輸入後我的採集進程較慢,不知是不是網速影響,稍等一會就能出來:

可以看到對於採集對象的解析和存入dict再輸出,這裏shell下可以多行代碼 ,

...:狀態下輸入完代碼多敲一次回車,quit()是退出命令,其中下方代碼中 end=“;” 語句是避免換行,以分號結束單條結果

完成標題的提取後,對於進一步的採集,側重看源碼規則,針對規則寫出xpath函數中引號包含的特徵式,以獲取到匹配的結果:

採集成功,這部分練習結束 。

3.CSS選擇器

用樣例說明它的使用,還是拿taobao測試。對象URL是:https://www.taobao.com/tbhome/page/market-list

【練習目標】將taobao市場上的分類都取下來:

因爲分類有點複雜,先給目標一個截圖再往後走:

照例將上方URL接上 scrapy shell 命令後回車,在採集完成後的shell中輸入命令,常規操作,先看狀態,200往後走:

對a標籤的“category-*-*”屬性的文本(雙冒號加text,千萬記得後面不用跟括號,方法才需括號),結果果然對應列表,這是一級輸出,往後走:

嘗試到標題以後,對二級分類繼續進行篩選,這部分一樣的代碼我爬到的結果跟老師不太一樣,所以按照理解稍微改動一下代碼,再次嘗試:

經過修改 可以看出確實是把分類對象全爬取下來了。上下兩種是我使用了兩種不同的分隔符,可以看出來去掉了最後一行的換行輸出後,就在一行了:

4.正則匹配

這部分需要注意的是,不能直接用,需要先用xpath()或者selecto進行引導,注意括號的使用:

依舊是上個小案例,對於baidu網頁title標籤內的提取, 還有[0]和re_first()兩種方法取出值:

這部分的練習就到這裏。

今天~的那句話:刻意練習,每日精進!

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章