學習lxml和xpath

xml是一種標記語法的文本格式,xpath可以方便的定位xml中的元素和其中的屬性值。html也屬于標記語言,可以用xpath來獲取想要的對象和屬性。
lxml是python中的一個包,這個包中包含了將html文本轉成xml對象,和對對象執行xpath的功能。

以下是xpath的常用路徑選擇語法:

  • 節點名 選取此節點下的所有子節點
  • / 從根節點選取
  • // 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。
  • @ 選取屬性

以下是一個練習,爬取,貼吧的圖片:

思路:

1. 根據url變化寫出,列表頁的url表達式

2. 訪問列表頁,通過xpah獲取每條內容的鏈接

3. 通過連接進入詳情頁,獲取其中的圖片鏈接

4. 通過圖片src 訪問圖片,并保存在本地

這里講一個大坑

從瀏覽器中通過xpath,能匹配到


enter description here
enter description here

但是在代碼中運行卻不能,
經過一番折騰終于發現了,查看response文本,
竟然發現body部分被注釋掉了,那么取消掉注釋就可以匹配到了。

# coding=utf8

import urllib
import urllib2
from lxml import etree


headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}
def load_page(url):
    """
    作用:根據url發送請求,獲取服務器相應文件
    url: 需要爬取的url地址
    """

    request = urllib2.Request(url,headers=headers)


    response = urllib2.urlopen(request).read().replace('<!--','').replace('--!>','')
    # with open('sss.html','w') as f:
    #     f.write(response)

    links =  etree.HTML(response).xpath(r'//div[@class="t_con cleafix"]/div/div/div/a/@href')
    print links
    for link in links:
        load_img(link)
        print('*************')
        print link

def load_img(link):

    url = 'https://tieba.baidu.com'+link

    request = urllib2.Request(url,headers=headers)
    response = urllib2.urlopen(request).read()
    # with open('s.html','w') as f:
    #     f.write(response)
    my_xml = etree.HTML(response)
    img_list = my_xml.xpath(r'//img[@class="BDE_Image"]/@src')
    for img_src in img_list:
        write_img(img_src)

def write_img(src):
    request = urllib2.Request(src,headers=headers)
    response = urllib2.urlopen(request).read()
    with open('img/'+src[-15:],'wb') as f:
        f.write(response)

def tieba_spider(url,bagin_page,end_page):
    '''
    作用;貼吧爬蟲調度器,負責組合處理每個頁面的url
    url :貼吧url前部分

    '''

    #每一頁一頁的爬,用for
    for i in range(bagin_page,end_page+1):
        pn = (i-1)*50 #這里是百度貼吧表示 頁碼的方式
        ful_url = url +'&pn=' +str(pn)
        print ful_url
        file_name = '第' + str(i) +'頁.html'
        #調用load_page
        load_page(ful_url)



if __name__ == '__main__':
    kw = raw_input("輸入貼吧名:")
    begain_page = int(raw_input('起始頁:'))
    end_page = int(raw_input('輸入結束頁'))

    url ='https://tieba.baidu.com/f?'
    key = urllib.urlencode({'kw':kw})

    ful_url = url  +key

    tieba_spider(ful_url,begain_page,end_page)

這樣就爬取了文章中的圖片了:


enter description here
enter description here

總結:

  1. 通過xpth獲取節點時,要分析html結構。
  2. 瀏覽器上和用urlopen獲得的html會有不同,以response為準
  3. lmxl具有xpath功能
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容