Python作業(yè):BeatifulSoup和XPath比較(以糗百爬蟲為例)

之前的作業(yè)已經(jīng)實現(xiàn)了BeatifulSoup爬取糗事百科菠赚,這次用XPath實現(xiàn)驳阎,順便做一次對比抗愁。

XPath表達式

  • 常用Xpath表達式


    XPath常用表達式
  • Xpath表達式通配符


    Xpath表達式通配符
  • XPath表達式實例


    Xpath表達式實例
  • XPath的text()與string()

string()

string()能獲取當前捕獲標簽及其子代標簽的文本信息。

text()

text()只能獲取當前捕獲標簽的文本信息呵晚。

實例
實例html代碼顯示的內(nèi)容

一般情況下XPath的獲取直接用Chrome的開發(fā)者工具得到蜘腌,選中要爬取的信息,右鍵 --> copy --> copy xpath饵隙,然后再根據(jù)情況適當修改撮珠。Chrome有一個第三方插件SelectorGadget可以很容易得到XPath表達式

XPath爬取糗事百科參考代碼

# 解析網(wǎng)頁內(nèi)容,提取段子信息
def parse_html(html):
    selector = etree.HTML(html)
    # //*[@id="qiushi_tag_119074910"]
    # //*[@id="content-left"]
    jokes = []
    for joke in selector.xpath('//div[@class="article block untagged mb15"]'):
        joke_info = []
        author_name = joke.xpath('div/*/h2/text()')[0]        
        author_sex = joke.xpath('div/div/@class')[0].split()[-1][:-4] if joke.xpath('div/div/@class') else '不知道'        
        joke_content = joke.xpath('a/div[@class="content"]/span/text()')[0]
        vote_count = joke.xpath('div[@class="stats"]/span[@class="stats-vote"]/i/text()')[0]
        comment_count = joke.xpath('div[@class="stats"]/span[@class="stats-comments"]/*/i/text()')[0] if joke.xpath('div[@class="stats"]/span[@class="stats-comments"]/*/i/text()') else '0'
        joke_info.append(author_name)
        joke_info.append(author_sex)
        joke_info.append(joke_content)
        joke_info.append(vote_count)
        joke_info.append(comment_count)
        jokes.append(joke)
    return jokes

Beautiful爬取糗事百科參考代碼

# 解析網(wǎng)頁,獲取需要的信息
def parse_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    for i in soup.find_all(name='div', class_='mb15'):
        print({
            'author_name': i.find(name='h2').text,
            # 根據(jù)div節(jié)點的class屬性來判斷性別,匿名用戶不知道性別
            # 節(jié)點信息<div class="articleGender manIcon">21</div>
            'author_sex': i.find(
                # get('class')獲取到兩個屬性,一個是articleGender,另一個是manIcon(womanIcon)
                # get('class')[-1]取到manIcon(womanIcon)字符串后用切片取得man(woman)
                # get('class')[-1][:-4]表示取字符串第一個字符到倒數(shù)第5個字符,字符串最后一個字符串索引表示為-1
                name='div', class_='articleGender').get('class')[-1][:-4] if i.find(
                    name='div', class_='articleGender') is not None else '不知道',
            # 匿名用戶不知道年齡
            'author_age': i.find(
                name='div', class_='articleGender').text if i.find(
                    name='div', class_='articleGender') is not None else '0',
            'joke_content': i.find(name='div', class_='content').text.strip(),
            'laugher_count': i.find(name='div', class_='stats').text.split()[0],
            'comment_count': i.find(name='div', class_='stats').text.split()[-2],
            })   

關(guān)于class金矛,XPath與BeatifulSoup的不同點

  • XPath獲取class屬性或根據(jù)class屬性查詢芯急,參考代碼如下
articles = selector.xpath('//div[@class="article block untagged mb15"]')

多個屬性的class直接用空格隔開,非.號驶俊。

  • 而使用BeatifulSoup根據(jù)class屬性查詢志于,需改為class_class是Python關(guān)鍵字),參考代碼如下:
soup.find_all(name='div', class_='mb15')

使用BeatifulSoup的xpath()方法需要用extract()废睦、extract_first()才能提取到信息伺绽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嗜湃,隨后出現(xiàn)的幾起案子奈应,更是在濱河造成了極大的恐慌,老刑警劉巖购披,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杖挣,死亡現(xiàn)場離奇詭異,居然都是意外死亡刚陡,警方通過查閱死者的電腦和手機惩妇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筐乳,“玉大人歌殃,你說我怎么就攤上這事◎疲” “怎么了氓皱?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我波材,道長股淡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任廷区,我火速辦了婚禮唯灵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘隙轻。我一直安慰自己早敬,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布大脉。 她就那樣靜靜地躺著搞监,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镰矿。 梳的紋絲不亂的頭發(fā)上琐驴,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音秤标,去河邊找鬼绝淡。 笑死,一個胖子當著我的面吹牛苍姜,可吹牛的內(nèi)容都是我干的牢酵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼衙猪,長吁一口氣:“原來是場噩夢啊……” “哼馍乙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起垫释,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤丝格,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后棵譬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體显蝌,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年订咸,在試婚紗的時候發(fā)現(xiàn)自己被綠了曼尊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡脏嚷,死狀恐怖骆撇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情然眼,我是刑警寧澤艾船,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布葵腹,位于F島的核電站高每,受9級特大地震影響屿岂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鲸匿,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一爷怀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧带欢,春花似錦运授、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渡贾,卻和暖如春逗宜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背空骚。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工纺讲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人囤屹。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓熬甚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肋坚。 傳聞我的和親對象是個殘疾皇子乡括,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

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