微博爬蟲系列之博文評(píng)論爬取

前言

之前寫的微博爬蟲系列還沒寫完步淹,想起來(lái)繼續(xù)寫下去贾富。近期看了下爬取微信公眾號(hào)文章的方法,也寫了相關(guān)的代碼崇决,之后再看看寫成博客吧~
本篇主要針對(duì)怎么對(duì)指定博文下的評(píng)論進(jìn)行爬取材诽。
準(zhǔn)備寫的內(nèi)容:

微博熱門內(nèi)容及榜單的博文爬取 微博爬蟲系列之微博榜單博文爬取
定向關(guān)鍵詞及指定用戶博文爬取 微博爬蟲系列之關(guān)鍵詞及指定用戶博文爬取
博文評(píng)論爬取 微博爬蟲系列之博文評(píng)論爬取
微博用戶信息爬取

針對(duì)博文評(píng)論的爬取,采用的仍然是微博網(wǎng)頁(yè)版https://weibo.cn恒傻,在爬取時(shí)仍然需要cookies脸侥,獲取方式可參照微博爬蟲系列之關(guān)鍵詞及指定用戶博文爬取

這里隨便選用一個(gè)人民日?qǐng)?bào)的微博博文進(jìn)行評(píng)論的爬取盈厘。首先需要獲取博文的評(píng)論頁(yè)數(shù)睁枕,由于微博的一些反爬措施,并不能完全爬取到所有頁(yè)面沸手。為了盡可能地爬取多一些評(píng)論外遇,這里將評(píng)論熱門頁(yè)面與默認(rèn)頁(yè)面都爬取下來(lái)。

import re
from urllib import request
cookies = '你的cookies'
headers = {
      "user-agent": get_random_ua(),
      'Cookie' : cookies,
    }
page_res = requests.get(url, headers = headers)

查看網(wǎng)頁(yè)源代碼契吉,可以看到點(diǎn)擊查看更多熱門的地方以及寫著有多少頁(yè)評(píng)論的地方:


在這里插入圖片描述
hot_rank = re.search(r'查看更多熱門', page_res.text)
all_page = re.search(r'/>&nbsp;1/(\d+)頁(yè)</div>', page_res.text)

if all_page:
    all_page = all_page.group(1)
    all_page = int(all_page)
    all_page = all_page if all_page <= 50 else 50
    if hot_rank:
        hot_url = url.replace('comment', 'comment/hot')
        page_urls.append(hot_url)
        for page_num in range(2, all_page + 1):
            page_url = hot_url.replace('page=1', 'page={}'.format(page_num))
            page_urls.append(page_url)
            
    for page_num in range(2, all_page + 1):
        page_url = url.replace('page=1', 'page={}'.format(page_num))
        page_urls.append(page_url)

通過這樣的方式跳仿,盡可能多地爬取評(píng)論數(shù)據(jù)。當(dāng)然這樣也會(huì)出現(xiàn)重復(fù)評(píng)論的情況捐晶,并且也不能完全爬取所有評(píng)論菲语。目前想到的方法就只能盡可能地多爬一些妄辩,爬取后去重。

在獲取了所有頁(yè)面后谨究,開始爬取每一頁(yè)的評(píng)論內(nèi)容恩袱。分析網(wǎng)頁(yè)源代碼可以看到每一個(gè)評(píng)論的標(biāo)記是<div class = "c" id = ""></div>

在這里插入圖片描述

對(duì)上面獲取到的url進(jìn)行循環(huán)爬取評(píng)論頁(yè)面內(nèi)容,下面用第一頁(yè)作為例子胶哲,用lxml.etree進(jìn)行解析與定位畔塔。

from lxml import etree
res = requests.get(url, headers = headers)    
tree_node = etree.HTML(res.text.encode('utf-8'))
comment_nodes = tree_node.xpath('//div[@class="c" and contains(@id,"C_")]')

通過這樣子就可以定位到評(píng)論部分,返回的comment_nodes是一個(gè)列表鸯屿,每個(gè)元素是一個(gè)評(píng)論的元素澈吨,每個(gè)評(píng)論內(nèi)的內(nèi)容可以看源代碼:

在這里插入圖片描述

這里假設(shè)只爬取評(píng)論用戶id、評(píng)論用戶名寄摆、評(píng)論id谅辣、評(píng)論內(nèi)容、點(diǎn)贊數(shù)婶恼,其他項(xiàng)來(lái)源這些也是一樣的(在上面就是來(lái)自網(wǎng)頁(yè))桑阶。

## 評(píng)論用戶id
comment_user_url = comment_node.xpath('.//a[contains(@href,"/u/")]/@href')
## 這里是因?yàn)橛械挠脩鬷d貌似沒有/u/,還有的不是數(shù)字
if comment_user_url:
    comment_user_id = re.search(r'/u/(\d+)', comment_user_url[0]).group(1)
else:
    comment_user_url = comment_node.xpath('.//a[contains(@href,"/")]/@href')
    if comment_user_url:
        comment_user_id = re.search(r'/(.*)', comment_user_url[0]).group(1)

## 評(píng)論用戶名
comment_user_name = str(comment_node.xpath('./a/text()')[0])
## 評(píng)論id
comment_id = str(comment_node.xpath('./@id')[0])
## 評(píng)論內(nèi)容
content = extract_comment_content(etree.tostring(comment_node, encoding='unicode'))
## 點(diǎn)贊數(shù)
like_num = comment_node.xpath('.//a[contains(text(),"贊[")]/text()')[-1]
comment_item['like_num'] = int(re.search('\d+', like_num).group())

這里還會(huì)涉及到可能有的評(píng)論會(huì)有評(píng)論配圖的情況勾邦,可以對(duì)應(yīng)的下載圖片蚣录。假設(shè)出現(xiàn)評(píng)論配圖時(shí),會(huì)有評(píng)論配圖的字眼:

##### 保存照片
def savePics(picUrl, filename , path):
    headers = {
      "user-agent": get_random_ua(),
    }
    
    # 目錄不存在眷篇,就新建一個(gè)
    if not os.path.exists(path):
        os.makedirs(path)
    picID = picUrl.split('/')[-1].split('?')[0].split('.')[0]
    Suffix = picUrl.split('/')[-1].split('?')[0].split('.')[-1]
    pic_path = ''.join([path, '/', filename, '.', Suffix])
    req = request.Request(picUrl, headers = headers)
    data = request.urlopen(req, timeout=30).read()
    f = open(pic_path, 'wb')
    f.write(data)
    f.close()
    
if '評(píng)論配圖' in content:
    comment_pic_url = etree.tostring(comment_node, encoding='unicode').split('class="ctt">', maxsplit=1)[1].split('舉報(bào)', maxsplit=1)[0]
    comment_pic_url = re.search(r'<a href="(.*)">評(píng)論配圖', comment_pic).group(1)
    savePics(comment_pic_url , filename  = 'filename', path = 'your_path')

到這里爬取微博博文評(píng)論數(shù)據(jù)的操作就結(jié)束啦~ 其他的看自己的需求寫完整的代碼即可萎河。在爬取過程中可能會(huì)出現(xiàn)爬不到的情況,可以用一些判斷語(yǔ)句跳過這些爬不到的情況蕉饼,爬取的時(shí)候也需要稍微停一下不然會(huì)被封號(hào)虐杯。之后再接著寫爬取微博博文系列的最后一篇吧~

最后編輯于
?著作權(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)離奇詭異,居然都是意外死亡瓤的,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門吞歼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)圈膏,“玉大人,你說我怎么就攤上這事篙骡』ぃ” “怎么了丈甸?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尿褪。 經(jīng)常有香客問我睦擂,道長(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