學習目的是爲了實踐,而實踐又能夠加深咱們的學習效率,今天給你們帶來了lxml庫的xpath匹配方法的實例!教程你們網上搜索有不少,咱們只看實用功能,固然,若是您已經很熟練了,能夠跳過不看的!html
版本:python3.6python
工具:pycharm、lxml庫(pip安裝便可)json
內容:新浪新聞搜索關鍵字抓取相關信息並保存本地txt文檔工具
咱們先打開網頁url,看下它的頁面數據是怎麼加載的學習
搜索世界盃,而後在開發者工具中先抓包看看是否爲json數據,結果發現並無,那麼直接打開源代碼看看呢網站
源代碼往下翻,到1200行左右看內容,眼熟不?全部的新聞都在源代碼中存在,那麼就簡單了!直接能夠抓取相關內容url
先介紹一下xpath的語法,其實各類教程都有寫,咱們只須要記住幾點spa
ok,不囉嗦了,直接上代碼了3d
能夠看到幾行代碼直接獲取了全部新聞的標題,簡單說一下那幾行代碼xml
一、url,有人可能已經注意到了,我在代碼中用的url和網頁實際的有些不一樣,那是由於url中?後面的內容,若是&後面的參數沒有結果的話,是能夠省略的,還有能夠省略的就是相似時間戳等等,你們能夠嘗試下!
二、html = requests.get(url)常規的獲取網頁源代碼,用的是requests庫,由於這個網站沒有反爬,因此很容易就取到了
三、data = etree.HTML(html.text)這裏就是上文所說,解析源碼的語法,並且lxml解析源碼還一個好處就是,若是源碼中存在非閉合的標籤或者不是很規範的標籤,它會自動補全,很是實用!
四、重點來了:infos = data.xpath('//div[@class="r-info r-info2"]/h2/a')這行代碼是獲取源代碼中帶有"r-info r-info2"值的class屬性,而且它在div標籤中,而後在標籤內容中查找h2標籤及h2標籤下的a標籤,咱們來看看網頁中的位置
這裏須要注意的是,儘可能選擇用class屬性去定位是比較好的,由於它的屬性通常都是功能惟一的,比較方便!你們能夠先複製屬性值而後去源代碼中搜索,若是惟一或者所在的標籤所有是須要的內容,那麼就可使用,若是不是,請往上級查找!
五、由於剛纔定位到的標籤是列表形式,因此用for循環來遍歷取出,這裏重點講解下string(.)的用法:
上面的標籤內容是很是方便的,標題就在a標籤下的文本中,可是依然存在一種狀況,好比標題中含有咱們是搜索的關鍵字的時候,它就不是隻存在a標籤下了,好比下圖
短短一行,存在2個標籤,a和a標籤下的span標籤,那麼這種狀況下,咱們就須要使用string(.)來匹配了,它的主要功能是取出所屬標籤下全部文本內容!因此咱們的語法就成了info.xpath('string(.)',而後用print顯示就達到了效果!
好了,語法大概說到這,咱們將全部的標題和url、簡介所有抓取下來,而後寫到txt文檔,篇幅有限就抓5頁的內容吧!
ok,內容所有寫到文件了,固然了,還能夠繼續往下寫,好比進入每個新聞頁面,抓取全部文本內容,也是同樣的寫法,你們有興趣的能夠自行完善哦!
推薦一個我我的的學習方法,那就是多看多聽多練!多看看大神的教程、博客、經驗總結等等,多聽聽大神的思路分析,最重要的是多練,代碼必定要多寫!代碼必定要多寫!代碼必定要多寫!這樣才能更快的學習進步!!你們加油