技术人员教你抓取微博内容并建立数据库 (抓取微博内容数据库)
社交媒体已经成为了人们日常生活和交流的主要渠道,微博作为社交媒体中的一员,更是被广泛应用。对于一些需要获取微博内容并了解用户态度和观点的人来说,如政治分析师、市场调查员和企业监控专员等,抓取微博内容并将其转换为可分析的数据是非常必要的。在这篇文章中,我将介绍如何用Python爬虫抓取微博内容并建立数据库。
1. 确定需求
在开始编写代码之前,首先需要明确自己的需求。我们需要什么样的信息?我们要如何筛选内容?最终的数据格式应该是什么样的?这些问题的答案将直接影响到爬虫的设计。
在本次示范中,我们需要抓取包括文本、图片、视频等在内的微博内容,包括用户ID、发布时间、点赞数、评论数、转发数及内容标签等信息,并将其存储在MySQL数据库中,方便后续处理和分析。
2. 准备工作
在开始编写代码之前,我们需要做一些准备工作:
– 下载并安装Python3和MySQL
– 安装必要的Python包:pandas、numpy、requests、beautifulsoup、pymysql和re
– 获取微博API
3. 编写代码
接下来,我们将编写抓取微博内容并存储至数据库的代码,具体操作如下:
import pandas as pd
import numpy as np
import requests
import re
import pymysql
from bs4 import BeautifulSoup
from datetime import datetime
# 输入微博用户名和密码
username = ‘your_username’
password = ‘your_password’
# 登录微博
session = requests.session()
login_url = ‘https://passport.weibo.cn/signin/login’
login_data = {‘username’: username, ‘password’: password}
session.post(login_url, data=login_data)
# 获取微博信息
def get_weibo_info(uid):
weibo_url = f’https://m.weibo.cn/api/contner/getIndex?uid={uid}&luicode=10000011&lfid=230283{uid}&fid=100103{uid}&type=uid&value={uid}&contnerid=107603{uid}’
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3’}
r = session.get(weibo_url, headers=headers)
data = r.json()[‘data’][‘cards’]
infos = []
for d in data:
if not ‘mblog’ in d.keys():
continue
else:
mblog = d[‘mblog’]
weibo_info = {}
weibo_info[‘id’] = mblog[‘id’]
weibo_info[‘time’] = datetime.strptime(mblog[‘created_at’],
‘%a %b %d %H:%M:%S +0800 %Y’)
weibo_info[‘text’] = BeautifulSoup(mblog[‘text’], ‘html.parser’).get_text()
weibo_info[‘scheme’] = f”https://m.weibo.cn/detl/{weibo_info[‘id’]}”
weibo_info[‘like’] = mblog[“attitudes_count”]
weibo_info[‘repost’] = mblog[‘reposts_count’]
weibo_info[‘comment’] = mblog[‘comments_count’]
weibo_info[‘source’] = BeautifulSoup(mblog[‘source’], ‘html.parser’).get_text()
weibo_info[‘is_video’] = False
if ‘page_info’ in mblog.keys():
if mblog[‘page_info’][‘type’] == “video”:
weibo_info[‘is_video’] = True
weibo_info[‘video_url’] = mblog[‘page_info’][‘media_info’][‘url’]
if ‘pics’ in mblog.keys():
images = []
for i in mblog[‘pics’]:
images.append(i[‘large’][‘url’])
weibo_info[‘images’] = ‘,’.join(images)
else:
weibo_info[‘images’] = ”
infos.append(weibo_info)
return infos
# 建立MySQL连接
conn = pymysql.connect(host=’localhost’, port=3306, user=’root’, passwd=’your_pass’, db=’weibo_info’,charset=’utf8′)
cursor = conn.cursor()
# 获取微博用户ID列表
uid_list = [‘11111’, ‘22222’, ‘33333’]
# 抓取微博信息并存储至数据库
for uid in uid_list:
df = pd.DataFrame(get_weibo_info(uid))
df[‘uid’] = uid
if df.empty:
continue
else:
for i, row in df.iterrows():
sql = f”INSERT INTO weibo (id, uid, time, text, scheme, like, repost, comment, source, is_video, video_url, images) VALUES (‘{row.id}’, ‘{row.uid}’, ‘{row.time}’, ‘{row.text}’, ‘{row.scheme}’, ‘{row.like}’, ‘{row.repost}’, ‘{row.comment}’, ‘{row.source}’, ‘{row.is_video}’, ‘{row.video_url}’, ‘{row.images}’)”
cursor.execute(sql)
conn.commit()
print(f”微博{row.id}已存储至数据库”)
# 关闭连接
cursor.close()
conn.close()
4. 运行代码
将上述代码存储在.py文件中并运行,即可抓取微博内容并存储至MySQL数据库中,方便后续处理和分析。
本篇文章中,我们介绍了如何用Python爬虫抓取微博内容并建立数据库。抓取微博内容可以让我们了解用户态度和观点,以及产品、品牌或新闻等在社交媒体上的影响和反馈。通过以上步骤并按需求筛选内容,我们可以获取到更为丰富、全面的微博数据,来更好的为我们提供参考和帮助。