副标题[/!--empirenews.page--]
这应该是一篇拖得蛮久的文章。

故事源于潘长江在某个综艺节目上没认出蔡徐坤,然后潘长江老师的微博评论区就炸锅了。
最后搞得两边都多多少少受到网络暴力的影响。
直至今日,这条微博的评论区还在更新着。
不得不说微博的黑粉,强行带节奏,真的很可怕。
还有比如自己一直关注的英雄联盟。
上周王校长也是被带了一波节奏,源于姿态退役后又复出的一条微博。
本来是一句很普通的调侃回复,「离辣个传奇adc的回归,还远吗?[二哈]」。
然后就有人开始带王校长的节奏,直接把王校长给惹毛了。
上面这些事情,对于我这个吃瓜群众,也没什么好说的。
只是希望以后能没有那么多无聊的人去带节奏,强行给他人带来压力。
本次通过获取潘长江老师那条微博的评论用户信息,来分析一波。
一共是获取了3天的评论,共14万条。
一、前期工作
微博评论信息获取就不细说,之前也讲过了。
这里提一下用户信息获取,同样从移动端下手。
主要是获取用户的昵称、性别、地区、微博数、关注数、粉丝数。
另外本次的数据存储采用MySQL数据库。
创建数据库。
- import pymysql
-
- db = pymysql.connect(host='127.0.0.1', user='root', password='774110919', port=3306)
- cursor = db.cursor()
- cursor.execute("CREATE DATABASE weibo DEFAULT CHARACTER SET utf8mb4")
- db.close()
创建表格以及设置字段信息。
- import pymysql
-
- db = pymysql.connect(host='127.0.0.1', user='root', password='774110919', port=3306, db='weibo')
- cursor = db.cursor()
- sql = 'CREATE TABLE IF NOT EXISTS comments (user_id VARCHAR(255) NOT NULL, user_message VARCHAR(255) NOT NULL, weibo_message VARCHAR(255) NOT NULL, comment VARCHAR(255) NOT NULL, praise VARCHAR(255) NOT NULL, date VARCHAR(255) NOT NULL, PRIMARY KEY (comment, date))'
- cursor.execute(sql)
- db.close()
二、数据获取
具体代码如下。
- from copyheaders import headers_raw_to_dict
- from bs4 import BeautifulSoup
- import requests
- import pymysql
- import re
-
- headers = b"""
- accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
- accept-encoding:gzip, deflate, br
- accept-language:zh-CN,zh;q=0.9
- cache-control:max-age=0
- cookie:你的参数
- upgrade-insecure-requests:1
- user-agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
- """
-
- # 将请求头字符串转化为字典
- headers = headers_raw_to_dict(headers)
-
-
- def to_mysql(data):
- """
- 信息写入mysql
- """
- table = 'comments'
- keys = ', '.join(data.keys())
- values = ', '.join(['%s'] * len(data))
- db = pymysql.connect(host='localhost', user='root', password='774110919', port=3306, db='weibo')
- cursor = db.cursor()
- sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
- try:
- if cursor.execute(sql, tuple(data.values())):
- print("Successful")
- db.commit()
- except:
- print('Failed')
- db.rollback()
- db.close()
-
-
- def get_user(user_id):
- """
- 获取用户信息
- """
- try:
- url_user = 'https://weibo.cn' + str(user_id)
- response_user = requests.get(url=url_user, headers=headers)
- soup_user = BeautifulSoup(response_user.text, 'html.parser')
- # 用户信息
- re_1 = soup_user.find_all(class_='ut')
- user_message = re_1[0].find(class_='ctt').get_text()
- # 微博信息
- re_2 = soup_user.find_all(class_='tip2')
- weibo_message = re_2[0].get_text()
- return (user_message, weibo_message)
- except:
- return ('未知', '未知')
-
-
- def get_message():
- # 第一页有热门评论,拿取信息较麻烦,这里偷个懒~
- for i in range(2, 20000):
- data = {}
- print('第------------' + str(i) + '------------页')
- # 请求网址
- url = 'https://weibo.cn/comment/Hl2O21Xw1?uid=1732460543&rl=0&page=' + str(i)
- response = requests.get(url=url, headers=headers)
- html = response.text
- soup = BeautifulSoup(html, 'html.parser')
- # 评论信息
- comments = soup.find_all(class_='ctt')
- # 点赞数
- praises = soup.find_all(class_='cc')
- # 评论时间
- date = soup.find_all(class_='ct')
- # 获取用户名
- name = re.findall('id="C_.*?href="/.*?">(.*?)</a>', html)
- # 获取用户ID
- user_ids = re.findall('id="C_.*?href="(.*?)">(.*?)</a>', html)
-
- for j in range(len(name)):
- # 用户ID
- user_id = user_ids[j][0]
- (user_message, weibo_message) = get_user(user_id)
- data['user_id'] = " ".join(user_id.split())
- data['user_message'] = " ".join(user_message.split())
- data['weibo_message'] = " ".join(weibo_message.split())
- data['comment'] = " ".join(comments[j].get_text().split())
- data['praise'] = " ".join(praises[j * 2].get_text().split())
- data['date'] = " ".join(date[j].get_text().split())
- print(data)
- # 写入数据库中
- to_mysql(data)
-
-
- if __name__ == '__main__':
- get_message()
(编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|