<p><pre> <code>'https://m.weibo.cn/api/comments/show?id=' + 单条微博id + '&page=' + 页码
</code></pre></p>
在社交媒体数据挖掘领域,微博信息的处理既具独到价值,亦面临诸多挑战。新浪提供的数据中,json格式的条目数量呈现随机性,这种现象常引发翻页时数据的重复问题,成为亟待解决的关键问题。
<p><pre> <code>import re,time,requests,urllib.request
weibo_id = input('输入单条微博ID:')
# url='https://m.weibo.cn/single/rcList?format=cards&id=' + weibo_id + '&type=comment&hot=1&page={}' #爬热门评论
url='https://m.weibo.cn/api/comments/show?id=' + weibo_id + '&page={}' #爬时间排序评论
headers = {
'User-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0',
'Host' : 'm.weibo.cn',
'Accept' : 'application/json, text/plain, */*',
'Accept-Language' : 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding' : 'gzip, deflate, br',
'Referer' : 'https://m.weibo.cn/status/' + weibo_id,
'Cookie' : '登录cookie信息',
'DNT' : '1',
'Connection' : 'keep-alive',
}
i = 0
comment_num = 1
while True:
# if i==1: #爬热门评论
# r = requests.get(url = url.format(i),headers = headers)
# comment_page = r.json()[1]['card_group']
# else:
# r = requests.get(url = url.format(i),headers = headers)
# comment_page = r.json()[0]['card_group']
r = requests.get(url = url.format(i),headers = headers) #爬时间排序评论
comment_page = r.json()['data']
if r.status_code ==200:
try:
print('正在读取第 %s 页评论:' % i)
for j in range(0,len(comment_page)):
print('第 %s 条评论' % comment_num)
user = comment_page[j]
comment_id = user['user']['id']
print(comment_id)
user_name = user['user']['screen_name']
print(user_name)
created_at = user['created_at']
print(created_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)
except:
i+1
pass
else:
break
</code></pre></p>
新浪数据的随机性
新浪提供的json数据量每次返回均呈现随机性,这一现象在爬虫操作中带来了一定难度。在X日某次实践中,有数据挖掘者观察到,这种随机性导致翻页后数据重复出现的频率显著增加。这一现象并非孤立案例,众多数据挖掘项目均面临此问题。对爬虫程序来说,这种不确定性无疑提高了数据处理成本。此外,数据重复不仅造成资源浪费,还可能对后续数据分析的准确性造成影响,例如基于数据计算出的比例、趋势等。
从技术角度看,此类随机性导致的重复问题难以仅通过数据收集初期阶段得到解决。必须在后端数据处理阶段实施严格筛选,从而保障用于分析的最终数据集的精确性和适用性。
数据的预处理
处理文本与来源中嵌入的emoji表情是一项繁复的任务。程序员Y曾在X月份投入大量时间进行这一工作。这些表情在数据库写入过程中遭遇了重重困难,原因是数据库的编码与解析规则通常难以有效应对这类特殊字符。此外,还需移除其中穿插的回复他人的HTML代码,这也是一项不可或缺的操作。
HTML代码中包含众多标签与属性,这些元素在纯文本格式的数据库记录中缺乏实际意义。若不予以移除,将严重干扰数据提取与后续分析工作,进而影响文本分类、情感分析等处理结果的准确性。
爬虫循环判断的漏洞
爬虫程序以网络状态码200作为循环结束条件存在明显缺陷。在多次测试中,微博一旦识别出爬虫访问,便返回一个空白的网页,导致程序出错。例如,在最近的某个测试项目中,由于微博返回了空白页面,程序突然停止运行,之前辛苦收集的数据瞬间丢失。
<p><pre> <code>conn =pymysql.connect(host='服务器IP(默认是127.0.0.1)',user='服务器名(默认是root)',password='服务器密码',charset="utf8",use_unicode = False) #连接服务器
cur = conn.cursor()
sql = "insert into xue.xueresponse(comment_id,user_name,created_at,text,likenum,source) values(%s,%s,%s,%s,%s,%s)" #格式是:数据名.表名(域名)
param = (comment_id,user_name,created_at,text,likenum,source)
try:
A = cur.execute(sql,param)
conn.commit()
except Exception as e:
print(e)
conn.rollback()
</code></pre></p>
该问题的根本原因在于循环判断条件的单一性过于简单。同时,这一现象使我们认识到,爬虫的稳定运行不仅受限于网络访问情况,还需综合考虑目标网站的反爬虫策略等因素。
数据库作为解决方案
面对爬虫可能出现的断线风险,数据库显现出其重要性。以MySQL数据库为例,在爬虫运行期间实时保存数据显得尤为关键。在一场持续10小时的测试中,每小时平均抓取2000条数据。若爬虫程序意外中断,数据库存储功能可确保数据安全,如同为数据存储增设了一道保障。
<p><pre> <code>conn =pymysql.connect(host='服务器IP',user='用户名',password='密码',charset="utf8") #连接服务器
with conn:
cur = conn.cursor()
cur.execute("SELECT * FROM xue.xueresponse WHERE id < '%d'" % 20000)
rows = cur.fetchall()
</code></pre></p>
针对mac操作系统用户,软件Navicat提供了数据库管理的辅助工具。然而,该软件的安装仅限于mac系统。对于使用其他操作系统的用户,他们需要寻找适用于自身系统的管理方案。
微博的反爬虫策略与应对
<p><pre> <code>for row in rows:
row = list(row)
del row[0]
if row not in commentlist:
commentlist.append([row[0],row[1],row[2],row[3],row[4],row[5]])
</code></pre></p>
使用Python执行数据抓取是常规操作,但新浪微博的抗爬虫措施颇为坚固。在一场规模较大的爬虫测试中,当抓取到约2万条实时评论时,便遭遇了多道关卡。针对此问题,存在两种解决途径:一是更替IP地址,有经验的爬虫开发者曾记录过如何使用IP代理;二是更换账号,用户可在X宝购买账号进行操作。然而,这两种方法要么要求掌握复杂的代理技术,要么可能遭遇账号安全等种种挑战。
情感分析的困境
<p><pre> <code>def snowanalysis(textlist):
sentimentslist = []
for li in textlist:
s = SnowNLP(li)
print(li)
print(s.sentiments)
sentimentslist.append(s.sentiments)
</code></pre></p>
在对微博评论进行情感分析时,存在诸多问题。借鉴现有情感分析算法的分析结果显示,错误率显著。以某明星事件为例,涉及该明星、李雨桐和高磊鑫,由于评论主体难以明确识别,且粉丝间的互动复杂,算法在判断评论针对对象情感时遭遇极大困难。分析表明,针对微博评论这类包含复杂人际互动和模糊话题指向的内容,现有算法尚有较大提升空间。
众多问题面前,如何高效全面地改进微博数据的抓取与解析流程?各位读者可在评论区提出见解。若本文对您有益,请勿忘点赞并转发。 |
|