xpath的使用

xpath的使用

#xpath:可以在xml中查找信息,對(duì)xml文檔中元素進(jìn)行遍歷和屬性的提取

# xml:被設(shè)計(jì)的目的是為了傳輸數(shù)據(jù),結(jié)構(gòu)和html非常相識(shí),是一種標(biāo)記語(yǔ)言

"""
xpath常見的語(yǔ)法:
nodename 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)
/        從根節(jié)點(diǎn)開始查找
//       匹配節(jié)點(diǎn)媳叨,不考慮節(jié)點(diǎn)的位置
.        選取當(dāng)前節(jié)點(diǎn)
..       選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
a/@href        取標(biāo)簽的數(shù)據(jù)
a/text()       取標(biāo)簽的文本
a[@class="123"] 根據(jù)class屬性尋找標(biāo)簽
a[@id="123"]    根據(jù)id屬性尋找標(biāo)簽

a[@id="123"][last()]  取最后一個(gè)id為123的a標(biāo)簽
a[@id="123"][postion() < 2]  取id為123的前兩個(gè)a標(biāo)簽
"""
import requests
from lxml.html import etree
import re

#樣例()
#http://www.budejie.com/audio/1
#http://www.budejie.com/audio/2
#http://www.budejie.com/audio/3

def load_page_data(url):
    """
    下載器(根據(jù)分頁(yè)url獲取分頁(yè)的頁(yè)面源碼)
    :param url: 分頁(yè)url地址
    :return:
    """
    req_header = {
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
    }
    response = requests.get(url,headers=req_header)
    if response.status_code == 200:
        print('請(qǐng)求成功')
        # with open('page.html','w') as file:
        #     file.write(response.text)
        status = parse_page_data(response.text)

        if status:
            #請(qǐng)求下一頁(yè)數(shù)據(jù)
            pattern = re.compile('\d+')
            cur_page = re.search(pattern,response.url).group()
            next_page = int(cur_page)+1
            next_page_url = re.sub(pattern,str(next_page),response.url)

            load_page_data(next_page_url)



def parse_page_data(html):
    """
    使用xpath從html頁(yè)面源碼中提取數(shù)據(jù)
    :param html:
    :return:
    """
    #pip3 install lxml
    #使用etree.HTML()方法將html轉(zhuǎn)為xml(element對(duì)象)
    html_element = etree.HTML(html)

    autio_list = html_element.xpath('//div[@class="j-r-c"]/div[@class="j-r-list"]/ul/li')
    print(autio_list)
    print(len(autio_list))

    for autio in autio_list:
        autio_data = {}
        #取出標(biāo)題
        autio_data['name'] = autio.xpath('.//a[@class="u-user-name"]/text()')[0]
        #取出內(nèi)容
        autio_data['content'] = autio.xpath('.//div[@class="j-r-list-c-desc"]/text()')[0]
        #發(fā)布時(shí)間
        autio_data['publishTime'] = autio.xpath('.//span[@class="u-time  f-ib f-fr"]/text()')[0]
        #點(diǎn)贊數(shù)
        autio_data['zanNum'] = autio.xpath('.//li[@class="j-r-list-tool-l-up"]/span/text()')[0]
        #差評(píng)書
        autio_data['lowNum'] = autio.xpath('.//li[@class="j-r-list-tool-l-down "]/span/text()')[0]
        #封面
        autio_data['coverImage'] = autio.xpath('.//div[@class=" j-audio"]/@data-poster')[0]
        #音頻
        autio_data['url'] = autio.xpath('.//div[@class=" j-audio"]/@data-mp3')[0]
        print(autio_data)
        download_audio_by_url(autio_data['url'],autio_data)

    if len(autio_list) > 0:
        return True
    else:
        return False

def download_audio_by_url(url,audioData):
    """
    根據(jù)銀屏url地址下載銀屏數(shù)據(jù)
    :param url:
    :param audioData:
    :return:
    """
    req_header = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
    }
    response = requests.get(url,headers=req_header)
    if response.status_code == 200:
        print(response.url,'下載成功')
        filename = response.url[-17:]
        #print('hhhhhhhhhh',filename)
        print('baisibudejie/'+filename)
        with open('baisibudejie/'+filename,'wb') as file:
            file.write(response.content)
            audioData['localpath'] = 'baisibudejie/'+filename
        #將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)
        save_data_to_db(audioData)

def save_data_to_db(audio):
    print(audio)


if __name__ == '__main__':

    start_url = 'http://www.budejie.com/audio/1'
    load_page_data(start_url)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剪廉,一起剝皮案震驚了整個(gè)濱河市膝舅,隨后出現(xiàn)的幾起案子脖阵,更是在濱河造成了極大的恐慌疼电,老刑警劉巖院喜,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爷辱,死亡現(xiàn)場(chǎng)離奇詭異既鞠,居然都是意外死亡煤傍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門嘱蛋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蚯姆,“玉大人,你說(shuō)我怎么就攤上這事洒敏×淞担” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵桐玻,是天一觀的道長(zhǎng)篙挽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)镊靴,這世上最難降的妖魔是什么铣卡? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮偏竟,結(jié)果婚禮上煮落,老公的妹妹穿的比我還像新娘。我一直安慰自己踊谋,他們只是感情好蝉仇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布俺叭。 她就那樣靜靜地躺著,像睡著了一般溪王。 火紅的嫁衣襯著肌膚如雪浪谴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天害驹,我揣著相機(jī)與錄音鞭呕,去河邊找鬼。 笑死宛官,一個(gè)胖子當(dāng)著我的面吹牛葫松,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播底洗,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腋么,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了亥揖?” 一聲冷哼從身側(cè)響起珊擂,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徐块,沒想到半個(gè)月后未玻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胡控,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年扳剿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昼激。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庇绽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出橙困,到底是詐尸還是另有隱情瞧掺,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布凡傅,位于F島的核電站辟狈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏夏跷。R本人自食惡果不足惜哼转,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望槽华。 院中可真熱鬧壹蔓,春花似錦、人聲如沸猫态。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至勇凭,卻和暖如春疚膊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背套像。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工酿联, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人夺巩。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像周崭,于是被迫代替她去往敵國(guó)和親柳譬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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