python爬蟲回顧<五>:利用XPath爬取指定網(wǎng)頁的標(biāo)題以及文本

在爬取了政府工作報(bào)告以后,一項(xiàng)新的任務(wù)又出現(xiàn)了,我們需要人民日?qǐng)?bào)社論的標(biāo)題以及社論文章進(jìn)行分析。
與上幾次不同的是這次我們運(yùn)用的方法是XPath加DOM樹的方式。這種方法我更傾向于是面向特征的查找方法,如果網(wǎng)頁頁面不是雜亂無章而是以一種規(guī)范地形式制作的話,用這種方法比正則表達(dá)式簡單得多。
這種方法對(duì)于爬蟲來說更主要的是解析方式的改變。

請(qǐng)求

請(qǐng)求的方式和原本沒有兩樣

        # 社論地址 綁定
        edit_url = 'http://opinion.people.com.cn/GB/8213/49160/49179/index.html'
        # 打開網(wǎng)站 并將源碼轉(zhuǎn)化為DOM樹
        edit_web = urllib2.urlopen(edit_url).read()

解析

制作DOM樹

lxml是python中處理xml的一個(gè)非常強(qiáng)大的庫,可以非常方便的解析和生成xml文件。
lxml.etree(html)可以將網(wǎng)頁變成DOM樹,每一個(gè)標(biāo)簽就變成了一個(gè)節(jié)點(diǎn),子標(biāo)簽就相應(yīng)變成子節(jié)點(diǎn)。

1487835109545.jpg
selector = etree.HTML(edit_web)

XPath

XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對(duì)元素和屬性進(jìn)行遍歷。
比如說我要獲取網(wǎng)頁的標(biāo)題,那么我們可以用/html/head/title/ 一個(gè)節(jié)點(diǎn)的一個(gè)節(jié)點(diǎn)的遍歷
最后text()把文本內(nèi)容獲取出來。
我更多地是把XPath想象成為一把剪刀,也就是說用XPath篩選的過程其實(shí)也就是剪枝的過程,剪掉那些符合我需要的數(shù)據(jù)的枝葉給保存下來。

# 在樹中抓取所有符合條件的標(biāo)題信息以及URL信息 (返回的也是一個(gè)樹)
title_content = selector.xpath('//*[@class = "t10l14bl"]/a[@href]')
# 抓取的URL信息都是相對(duì)地址 在打開時(shí)需要補(bǔ)全
url_content = selector.xpath('//*[@class = "t10l14bl"]/a')

存儲(chǔ)

存儲(chǔ)方法我采用的是保存到列表中

# 分別遍歷兩個(gè)樹 將所有的信息分別存入到列表中
edit_list = list([line.text[7:] for line in title_content])
url_list = list([line.get('href')for line in url_content])
# 列表的值一一對(duì)應(yīng) 兩兩值再組成一個(gè)列表
title_url_list = zip(edit_list, url_list)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容