爬蟲入門(3)-Xpath利器實(shí)戰(zhàn)百度貼吧

使用XPath分析一下比較復(fù)雜的貼吧

帝吧首屆相親大會: https://tieba.baidu.com/p/5098845608?pn=1

先上代碼

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from lxml import etree
import requests
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

url = 'https://tieba.baidu.com/p/5098845608?pn=1'
html = requests.get(url)
selector = etree.HTML(html.text)


img_all_list = [] # 存儲所有圖片鏈接
content_field = selector.xpath('//div[@class="l_post l_post_bright j_l_post clearfix  "]') # 獲取指定內(nèi)容
for each in content_field[1:]: 
    author = each.xpath('div[1]/ul/li[@class="d_name"]/a/text()')[0] # 獲取作者名稱
    content = each.xpath('div[2]/div[@class="p_content  "]/cc/div/text()') # 獲取貼吧內(nèi)容
    time = each.xpath('div[2]/div[@class="core_reply j_lzl_wrapper"]/div[1]/div[@class="post-tail-wrap"]/span[last()]/text()')[0] # 獲取發(fā)帖時間

    img_list = each.xpath('div[2]/div[@class="p_content  "]/cc/div//@src') # 獲取圖片鏈接
    img_all_list.append(img_list)
    print author
    print "\n".join(content).strip()
    print time
    print '\n'

i = 0
for img_list in img_all_list: # 下載圖片模塊
    for img_url in img_list:
        pic = requests.get(img_url)
        string = str(i + 1) + img_url[-4:]
        fp = open(string, 'wb')
        fp.write(pic.content)
        fp.close()
        i += 1

結(jié)果如下(當(dāng)然還有相親者圖片0-0):

如果熟悉Xpath語法,會很容易爬取這個網(wǎng)頁的內(nèi)容恐锦。因?yàn)樯弦黄獌?nèi)容分析過使用Xpath抓取網(wǎng)頁信息,這一篇就不詳細(xì)再說,原理都一樣岭妖。而這一次純屬拿來玩玩~

需要注意的兩個地方

1.last()的使用

time = each.xpath('div[2]/div[@class="core_reply j_lzl_wrapper"]/div[1]/div[@class="post-tail-wrap"]/span[last()]/text()')[0]

last()表示返回元素最后一個值届巩,在本例中源碼中跋核,我們可以看到

對于同一個標(biāo)簽'div[@class="post-tail-wrap"]/span',回帖時間有時候出現(xiàn)在第三個span標(biāo)簽狮杨,有時候出現(xiàn)在第四個span標(biāo)簽,但共同點(diǎn)都是處在最后一個span標(biāo)簽中到忽,所以采用last()值

2. Xpath獲取圖片

img_list = each.xpath('div[2]/div[@class="p_content "]/cc/div//@src')

“*//@src”用于獲取所有圖片鏈接

爬取前10頁信息

#-*_coding:utf8-*-

import requests
from lxml import etree
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def get_Allurl(): # 獲取貼吧前10頁內(nèi)容
    page = []
    url = 'https://tieba.baidu.com/p/5098845608?pn='
    for i in range(1, 11):
        a = url + str(i)
        page.append(a)
    return page

def spider(url):
    info_list=[]
    html = requests.get(url,timeout = 5) # 如果5秒內(nèi)網(wǎng)頁沒有響應(yīng)訪問請求橄教,則直接結(jié)束
    selector = etree.HTML(html.text)
    reply = selector.xpath('//div[@class="l_post l_post_bright j_l_post clearfix  "]')
    for each in reply:
        author = each.xpath('div[1]/ul/li[@class="d_name"]/a/text()')
        if len(author) == 0:
            continue
        author = author[0]
        content = each.xpath('div[2]/div[@class="p_content  "]/cc/div/text()')
        time = each.xpath('div[2]/div[@class="core_reply j_lzl_wrapper"]/div[1]/div[@class="post-tail-wrap"]/span[last()]/text()')[0]

        info = {}
        info['author'] = author
        info['reply'] = "\n\t".join(content).strip()
        info['time'] = time
        info_list.append(info)
    return info_list

def saveinfo(classinfo): # 保存信息
    f = open('tiebainfo.txt', 'w')
    for info_all in classinfo:
        for each in info_all:
            f.writelines('Author: ' + each['author'] + '\n')
            f.writelines('Content:\n\t' + each['reply'] + '\n')
            f.writelines('Time:   ' + each['time'] + '\n\n')
    f.close


if __name__ == '__main__':
    classinfo = []
    all_url = get_Allurl()
    for url in all_url:
        print u'正在處理:' + url
        info_list = spider(url)
        classinfo.append(info_list)
    saveinfo(classinfo)

就到這吧

好好學(xué)習(xí) 天天向上~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末清寇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子护蝶,更是在濱河造成了極大的恐慌华烟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件持灰,死亡現(xiàn)場離奇詭異盔夜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)堤魁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門喂链,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妥泉,你說我怎么就攤上這事椭微。” “怎么了盲链?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵蝇率,是天一觀的道長。 經(jīng)常有香客問我匈仗,道長瓢剿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任悠轩,我火速辦了婚禮间狂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘火架。我一直安慰自己鉴象,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布何鸡。 她就那樣靜靜地躺著纺弊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骡男。 梳的紋絲不亂的頭發(fā)上淆游,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音隔盛,去河邊找鬼犹菱。 笑死,一個胖子當(dāng)著我的面吹牛吮炕,可吹牛的內(nèi)容都是我干的腊脱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼龙亲,長吁一口氣:“原來是場噩夢啊……” “哼陕凹!你這毒婦竟也來了悍抑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤杜耙,失蹤者是張志新(化名)和其女友劉穎搜骡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泥技,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浆兰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了珊豹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片簸呈。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖店茶,靈堂內(nèi)的尸體忽然破棺而出蜕便,到底是詐尸還是另有隱情,我是刑警寧澤贩幻,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布轿腺,位于F島的核電站,受9級特大地震影響丛楚,放射性物質(zhì)發(fā)生泄漏族壳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一趣些、第九天 我趴在偏房一處隱蔽的房頂上張望仿荆。 院中可真熱鬧,春花似錦坏平、人聲如沸拢操。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽令境。三九已至,卻和暖如春顾瞪,著一層夾襖步出監(jiān)牢的瞬間舔庶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工陈醒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惕橙,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓孵延,卻偏偏與公主長得像吕漂,于是被迫代替她去往敵國和親亲配。 傳聞我的和親對象是個殘疾皇子尘应,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理惶凝,服務(wù)發(fā)現(xiàn),斷路器犬钢,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 聲明:本文講解的實(shí)戰(zhàn)內(nèi)容苍鲜,均僅用于學(xué)習(xí)交流,請勿用于任何商業(yè)用途玷犹! 一混滔、前言 強(qiáng)烈建議:請?jiān)陔娔X的陪同下,閱讀本文...
    Bruce_Szh閱讀 12,679評論 6 28
  • 20170531 這幾天重新拾起了爬蟲歹颓,算起來有將近5個月不碰python爬蟲了坯屿。 對照著網(wǎng)上的程序和自己以前寫的...
    八神蒼月閱讀 14,142評論 3 44
  • 文/陌宇軒 (黑龍江) 當(dāng)一頁紙還殘留一點(diǎn)空隙 我開始惦記 孤星 殘?jiān)?期盼黎明前的啟明星何時醒來 身上沾滿鉛墨的...
    小哲小詩閱讀 81評論 0 0
  • 豬養(yǎng)胖了,總會殺的巍扛。
    哎呀呀CN閱讀 189評論 0 0