獲取數據——爬取某微博評論


微博評論API

  • 想要爬取某一條微博的評論,首先會想到微博官方提供的API,但是不巧的是,官方提供的api能夠獲取的評論數量有限,不足以分析,那怎么辦呢?
  • 我們想到了網頁端,手機端的微博,希望直接爬取上面的數據。試了下網頁端,可能網頁做得很完善了吧,網頁端找不到突破口,於是想到手機端碰碰運氣。通過使用chrome的工具,發現:爬取最新評論的URL如下:url='https://m.weibo.cn/api/comments/show?id='+weibo_id+'&page={}',如果希望爬取某條微博下的評論,將weibo_id替換為該微博id即可。

爬取數據

  • 如今找到了微博評論的API,后面的事情就輕車熟路了。上requests,發get請求,傳入帶有cookies的header即可。cookies就是自己微博登陸的cookies,可以使用chrome開發者工具獲得。如百度的cookies可以通過network標簽頁下,選擇某一文檔獲得。

    直接上代碼比較直觀:
    i=0 # 評論的頁數
    comment_num=1 # 爬取的評論總數量
    while True:
        try:
            req=requests.get(url=url.format(i),headers=headers)
            comment_page=req.json()['data']
            if req.status_code==200:

                print('讀取%s頁的評論:'%i)
                for j in range(0,len(comment_page)):
                    print('第%s條評論'%comment_num)
                    user=comment_page[j]
                    comment_id=user['user']['id']#評論id
                    print(comment_id)
                    user_name=user['user']['screen_name']#發表評論的用戶名
                    print(user_name)
                    create_at=user['created_at']#發表時間
                    print(create_at)
                    # 去除評論中表情等的特殊字符
                    text=re.sub('<.*?>|回復<.*?>:|[\U00010000-\U0010ffff]|[\uD800-\uDBFF][\uDC00-\uDFFF]','',user['text'])
                    print(text)
                    likenum=user['like_counts']#點贊數
                    print(likenum)
                    source=re.sub('[\U00010000-\U0010ffff]|[\uD800-\uDBFF][\uDC00-\uDFFF]','',user['source'])#去除評論中表情等的特殊字符
                    print(source+'\r\n')

                    comment_num+=1
                i+=1
                time.sleep(3)#防止反爬蟲機制,停止一會~~~~
            else:
                break
        except:
            i+=1
            pass

現在我們已經獲取到了微博的評論,我們就把他們用Mysql存儲起來,以待后面的使用。我們使用pymysql這個包來操作Mysql,一個簡單的操作代碼如下:

class Sql(object):
        def __init__(self):
            pass

        def connect_sql(self):
    self.conn=pymysql.connect(host='127.0.0.1',user='root',password='1111',charset='utf8',use_unicode=False)
            self.cur=self.conn.cursor()

        def insert_data(self,comment_id,user_name,create_at,text,likenum,source):
            #數據庫名為nlp,表名為luhan
            sql='insert into nlp.luhan(comment_id,user_name,created_at,text,likenum,source) values(%s,%s,%s,%s,%s,%s)'
            param=(comment_id,user_name,create_at,text,likenum,source)
            try:
                self.cur.execute(sql,param)
                self.conn.commit()
            except Exception as e:
                print(e)
                self.conn.rollback()

這個類定義了一個insert_data函數,連接Mysql后,將上面的comment_id,user_name,create_at,text,likenum,source傳入函數即可存入Mysql。

至此,就可以把某條微博的評論獲取到本地了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM