1. 程式人生 > >用python寫網路爬蟲-爬取新浪微博評論

用python寫網路爬蟲-爬取新浪微博評論

新浪微博需要登入才能爬取,這裡使用m.weibo.cn這個移動端網站即可實現簡化操作,用這個訪問可以直接得到的微博id。

分析新浪微博的評論獲取方式得知,其採用動態載入。所以使用json模組解析json程式碼

單獨編寫了字元優化函式,解決微博評論中的嘈雜干擾字元

本函式是用python寫網路爬蟲的終極目的,所以採用函式化方式編寫,方便後期優化和新增各種功能

# -*- coding:gbk -*-
import re
import requests
import json
from lxml import html
#測試微博4054483400791767
comments=[]

def
get_page(weibo_id):
url='https://m.weibo.cn/status/{}'.format(weibo_id) html=requests.get(url).text regcount=r'"comments_count": (.*?),' comments_count=re.findall(regcount,html)[-1] comments_count_number=int(comments_count) page=int(comments_count_number/10) return page-1 def
opt_comment(comment):
tree=html.fromstring(comment) strcom=tree.xpath('string(.)') reg1=r'回覆@.*?:' reg2=r'回覆@.*?:' reg3=r'//@.*' newstr='' comment1=re.subn(reg1,newstr,strcom)[0] comment2=re.subn(reg2,newstr,comment1)[0] comment3=re.subn(reg3,newstr,comment2)[0] return
comment3 def get_responses(id,page): url="https://m.weibo.cn/api/comments/show?id={}&page={}".format(id,page) response=requests.get(url) return response def get_weibo_comments(response): json_response=json.loads(response.text) for i in range(0,len(json_response['data'])): comment=opt_comment(json_response['data'][i]['text']) comments.append(comment) weibo_id=input("輸入微博id,自動返回前5頁評論:") weibo_id=int(weibo_id) print('\n') page=get_page(weibo_id) for page in range(1,page+1): response=get_responses(weibo_id,page) get_weibo_comments(response) for com in comments: print(com) print(len(comments))