怎么复制自己的微博ID(并写入文件)

首页教程更新时间:2023-06-10 20:53:44

# 输入 # 用户id,例如新浪微博昵称为“Dear-迪丽热巴”的id为“1669879400” # # 输出 # 用户名:用户昵称,如"Dear-迪丽热巴" # 微博数:用户的全部微博数(转发微博 原创微博) # 关注数:用户关注的微博账号数量 # 粉丝数:用户的粉丝数 # 微博内容:以list的形式存储了用户所有微博内容 # 微博发布时间:以list的形式存储了用户所有微博的发布时间 # 微博对应的点赞数:以list的形式存储了用户所有微博对应的点赞数 # 微博对应的转发数:以list的形式存储了用户所有微博对应的转发数 # 微博对应的评论数:以list的形式存储了用户所有微博对应的评论数 # 结果文件:保存在当前目录的weibo文件夹里,名字为"user_id.txt"的形式 # 运行环境 # 开发语言:python2.7 # 系统: Windows/Linux # 使用说明 # 1.下载脚本 # # $ git clone https://github.com/dataabc/weibospider.git # 运行上述命令,将本项目下载到当前目录,如果下载成功当前目录会出现一个名为"weibospider"的文件夹; # 2.用文本编辑器打开weibospider文件夹下的"weibospider.py"文件; # 3.将"weibospider.py"文件中的“your cookie”替换成爬虫微博的cookie,后面会详细讲解如何获取cookie; # 4.将"weibospider.py"文件中的user_id替换成想要爬取的微博的user_id,后面会详细讲解如何获取user_id; # 5.按需求调用脚本。本脚本是一个Weibo类,用户可以按照自己的需求调用Weibo类。 例如用户可以直接在"weibospider.py"文件中调用Weibo类,具体调用代码示例如下: # # user_id = 1669879400 # filter = 1 # wb = Weibo(user_id,filter) #调用Weibo类,创建微博实例wb # wb.start() #爬取微博信息 # user_id可以改成任意合法的用户id(爬虫的微博id除外);filter默认值为0,表示爬取所有微博信息(转发微博 原创微博),为1表示只爬取用户的所有原创微博;wb是Weibo类的一个实例,也可以是其它名字,只要符合python的命名规范即可;通过执行wb.start() 完成了微博的爬取工作。在上述代码之后,我们可以得到很多信息: # wb.username:用户名; # wb.weibo_num:微博数; # wb.following:关注数; # wb.followers:粉丝数; # wb.weibo_content:存储用户的所有微博,为list形式,若filter=1, wb.weibo_content[0]为最新一条原创微博,filter=0为最新一条微博,wb.weibo_content[1]、wb.weibo_content[2]分别表示第二新和第三新的微博,以此类推。当然如果用户没有发过微博,wb.weibo_content则为[]; # wb.publish_time: 存储微博的发布时间,为list形式,如wb.publish_time[0]为最新一条微博的发布时间,与wb.weibo_content[0]对应,其它用法同wb.weibo_content; # wb.up_num:存储微博获得的点赞数,为list形式,如wb.up_num[0]为最新一条微博获得的点赞数,与wb.weibo_content[0]对应,其它用法同wb.weibo_content; # wb.retweet_num:存储微博获得的转发数,为list形式,如wb.retweet_num[0]为最新一条微博获得的转发数,与wb.weibo_content[0]对应,其它用法同wb.weibo_content; # wb.comment_num:存储微博获得的评论数,为list形式,如wb.comment_num[0]为最新一条微博获得的评论数,与wb.weibo_content[0]对应,其它用法同wb.weibo_content。 # 6.运行脚本。我的运行环境是IPython,通过 # # $ run filepath/weibospider.py # 即可运行脚本,大家可以根据自己的运行环境选择运行方式; Linux可以通过 # # $ python filepath/weibospider.py # 如何获取cookie # 1.用Chrome打开https://passport.weibo.cn/signin/login; # 2.按F12键打开Chrome开发者工具; # 3.点开“Network”,将“Preserve log”选中,输入微博的用户名、密码,登录 # 4.点击Chrome开发者工具“Name"列表中的"m.weibo.cn",点击"Headers",其中"Request Headers"下,"Cookie"后的值即为我们要找的cookie值,复制即可 # 如何获取user_id # 1.打开网址http://weibo.cn,搜索我们要找的人,如”郭碧婷“,进入她的主页; # 2.大部分情况下,在用户主页的地址栏里就包含了user_id,如”郭碧婷“的地址栏地址为"http://weibo.cn/u/1729370543?f=search_0",其中的"1729370543"就是她的user_id。 # 注意事项 # 1.user_id不能为爬虫微博的user_id。因为要爬微博信息,必须先登录到某个微博账号,此账号我们姑且称为爬虫微博。爬虫微博访问自己的页面和访问其他用户的页面,得到的网页格式不同,所以无法爬取自己的微博信息; # 2.cookie有期限限制,大约两天左右的有效期,超过有效期需重新更新cookie。

#!/usr/bin/env python # -*- coding: UTF-8 -*- import os import re import requests import sys import traceback from datetime import datetime from datetime import timedelta from lxml import etree class Weibo: cookie = {"Cookie": "your cookie"} # 将your cookie替换成自己的cookie # Weibo类初始化 def __init__(self, user_id, filter=0): self.user_id = user_id # 用户id,即需要我们输入的数字,如昵称为“Dear-迪丽热巴”的id为1669879400 self.filter = filter # 取值范围为0、1,程序默认值为0,代表要爬取用户的全部微博,1代表只爬取用户的原创微博 self.username = '' # 用户名,如“Dear-迪丽热巴” self.weibo_num = 0 # 用户全部微博数 self.weibo_num2 = 0 # 爬取到的微博数 self.following = 0 # 用户关注数 self.followers = 0 # 用户粉丝数 self.weibo_content = [] # 微博内容 self.publish_time = [] # 微博发布时间 self.up_num = [] # 微博对应的点赞数 self.retweet_num = [] # 微博对应的转发数 self.comment_num = [] # 微博对应的评论数 # 获取用户昵称 def get_username(self): try: url = "https://weibo.cn/%d/info" % (self.user_id) html = requests.get(url, cookies=self.cookie).content selector = etree.HTML(html) username = selector.xpath("//title/text()")[0] self.username = username[:-3] print u"用户名: " self.username except Exception, e: print "Error: ", e traceback.print_exc() # 获取用户微博数、关注数、粉丝数 def get_user_info(self): try: url = "https://weibo.cn/u/%d?filter=%d&page=1" % ( self.user_id, self.filter) html = requests.get(url, cookies=self.cookie).content selector = etree.HTML(html) pattern = r"\d \.?\d*" # 微博数 str_wb = selector.xpath( "//div[@class='tip2']/span[@class='tc']/text()")[0] guid = re.findall(pattern, str_wb, re.S | re.M) for value in guid: num_wb = int(value) break self.weibo_num = num_wb print u"微博数: " str(self.weibo_num) # 关注数 str_gz = selector.xpath("//div[@class='tip2']/a/text()")[0] guid = re.findall(pattern, str_gz, re.M) self.following = int(guid[0]) print u"关注数: " str(self.following) # 粉丝数 str_fs = selector.xpath("//div[@class='tip2']/a/text()")[1] guid = re.findall(pattern, str_fs, re.M) self.followers = int(guid[0]) print u"粉丝数: " str(self.followers) except Exception, e: print "Error: ", e traceback.print_exc() # 获取"长微博"全部文字内容 def get_long_weibo(self, weibo_link): try: html = requests.get(weibo_link, cookies=self.cookie).content selector = etree.HTML(html) info = selector.xpath("//div[@class='c']")[1] wb_content = info.xpath("div/span[@class='ctt']")[0].xpath( "string(.)").encode(sys.stdout.encoding, "ignore").decode( sys.stdout.encoding) return wb_content except Exception, e: print "Error: ", e traceback.print_exc() # 获取用户微博内容及对应的发布时间、点赞数、转发数、评论数 def get_weibo_info(self): try: url = "https://weibo.cn/u/%d?filter=%d&page=1" % ( self.user_id, self.filter) html = requests.get(url, cookies=self.cookie).content selector = etree.HTML(html) if selector.xpath("//input[@name='mp']") == []: page_num = 1 else: page_num = (int)(selector.xpath( "//input[@name='mp']")[0].attrib["value"]) pattern = r"\d \.?\d*" for page in range(1, page_num 1): url2 = "https://weibo.cn/u/%d?filter=%d&page=%d" % ( self.user_id, self.filter, page) html2 = requests.get(url2, cookies=self.cookie).content selector2 = etree.HTML(html2) info = selector2.xpath("//div[@class='c']") is_empty = info[0].xpath("div/span[@class='ctt']") if is_empty: for i in range(0, len(info) - 2): # 微博内容 str_t = info[i].xpath("div/span[@class='ctt']") weibo_content = str_t[0].xpath("string(.)").encode( sys.stdout.encoding, "ignore").decode( sys.stdout.encoding) weibo_content = weibo_content[:-1] weibo_id = info[i].xpath("@id")[0][2:] a_link = info[i].xpath( "div/span[@class='ctt']/a/@href") if a_link: if a_link[-1] == "/comment/" weibo_id: weibo_link = "https://weibo.cn" a_link[-1] wb_content = self.get_long_weibo(weibo_link) if wb_content: weibo_content = wb_content self.weibo_content.append(weibo_content) print u"微博内容:" weibo_content # 微博发布时间 str_time = info[i].xpath("div/span[@class='ct']") str_time = str_time[0].xpath("string(.)").encode( sys.stdout.encoding, "ignore").decode( sys.stdout.encoding) publish_time = str_time.split(u'来自')[0] if u"刚刚" in publish_time: publish_time = datetime.now().strftime( '%Y-%m-%d %H:%M') elif u"分钟" in publish_time: minute = publish_time[:publish_time.find(u"分钟")] minute = timedelta(minutes=int(minute)) publish_time = ( datetime.now() - minute).strftime( "%Y-%m-%d %H:%M") elif u"今天" in publish_time: today = datetime.now().strftime("%Y-%m-%d") time = publish_time[3:] publish_time = today " " time elif u"月" in publish_time: year = datetime.now().strftime("%Y") month = publish_time[0:2] day = publish_time[3:5] time = publish_time[7:12] publish_time = ( year "-" month "-" day " " time) else: publish_time = publish_time[:16] self.publish_time.append(publish_time) print u"微博发布时间:" publish_time str_footer = info[i].xpath("div")[-1] str_footer = str_footer.xpath("string(.)").encode( sys.stdout.encoding, "ignore").decode(sys.stdout.encoding) str_footer = str_footer[str_footer.rfind(u'赞'):] guid = re.findall(pattern, str_footer, re.M) # 点赞数 up_num = int(guid[0]) self.up_num.append(up_num) print u"点赞数: " str(up_num) # 转发数 retweet_num = int(guid[1]) self.retweet_num.append(retweet_num) print u"转发数: " str(retweet_num) # 评论数 comment_num = int(guid[2]) self.comment_num.append(comment_num) print u"评论数: " str(comment_num) self.weibo_num2 = 1 if not self.filter: print u"共" str(self.weibo_num2) u"条微博" else: print (u"共" str(self.weibo_num) u"条微博,其中" str(self.weibo_num2) u"条为原创微博" ) except Exception, e: print "Error: ", e traceback.print_exc() # 将爬取的信息写入文件 def write_txt(self): try: if self.filter: result_header = u"\n\n原创微博内容:\n" else: result_header = u"\n\n微博内容:\n" result = (u"用户信息\n用户昵称:" self.username u"\n用户id:" str(self.user_id) u"\n微博数:" str(self.weibo_num) u"\n关注数:" str(self.following) u"\n粉丝数:" str(self.followers) result_header ) for i in range(1, self.weibo_num2 1): text = (str(i) ":" self.weibo_content[i - 1] "\n" u"发布时间:" self.publish_time[i - 1] "\n" u"点赞数:" str(self.up_num[i - 1]) u" 转发数:" str(self.retweet_num[i - 1]) u" 评论数:" str(self.comment_num[i - 1]) "\n\n" ) result = result text file_dir = os.path.split(os.path.realpath(__file__))[ 0] os.sep "weibo" if not os.path.isdir(file_dir): os.mkdir(file_dir) file_path = file_dir os.sep "%d" % self.user_id ".txt" f = open(file_path, "wb") f.write(result.encode(sys.stdout.encoding)) f.close() print u"微博写入文件完毕,保存路径:" file_path except Exception, e: print "Error: ", e traceback.print_exc() # 运行爬虫 def start(self): try: self.get_username() self.get_user_info() self.get_weibo_info() self.write_txt() print u"信息抓取完毕" print "****************************************************************" except Exception, e: print "Error: ", e def main(): try: # 使用实例,输入一个用户id,所有信息都会存储在wb实例中 user_id = 5982879020 # 可以改成任意合法的用户id(爬虫的微博id除外) filter = 1 # 值为0表示爬取全部微博(原创微博 转发微博),值为1表示只爬取原创微博 wb = Weibo(user_id, filter) # 调用Weibo类,创建微博实例wb wb.start() # 爬取微博信息 print u"用户名:" wb.username print u"全部微博数:" str(wb.weibo_num) print u"关注数:" str(wb.following) print u"粉丝数:" str(wb.followers) if wb.weibo_content: print u"最新/置顶 微博为:" wb.weibo_content[0] print u"最新/置顶 微博发布时间:" wb.publish_time[0] print u"最新/置顶 微博获得赞数:" str(wb.up_num[0]) print u"最新/置顶 微博获得转发数:" str(wb.retweet_num[0]) print u"最新/置顶 微博获得评论数:" str(wb.comment_num[0]) except Exception, e: print "Error: ", e traceback.print_exc() if __name__ == "__main__": main(),

图文教程
相关文章
热门专题
推荐软件
奇热小说
奇热小说
下载
QQ2019手机版
QQ2019手机版
下载
王者荣耀
王者荣耀
下载
百度浏览器迷你版
百度浏览器迷你版
下载
2345浏览器手机版
2345浏览器手机版
下载
网易邮箱
网易邮箱
下载
爱奇艺
爱奇艺
下载
网易云音乐
网易云音乐
下载
WPSOffice
WPSOffice
下载
优酷
优酷
下载
谷歌浏览器(Chrome)
谷歌浏览器(Chrome)
下载
迅雷看看播放器
迅雷看看播放器
下载
UC浏览器
UC浏览器
下载
QQ音乐
QQ音乐
下载
阿里旺旺买家版v9.12.10C官方版
阿里旺旺买家版v9.12.10C官方版
下载
360安全卫士v12.1官方版
360安全卫士v12.1官方版
下载
猜你喜欢
iPubsoftPDFConverter(PDF转换器)v2.1.23官方版
iPubsoftPDFConverter(PDF转换器)v2.1.23官方版
下载
Vrideo
Vrideo
下载
母子健康手册
母子健康手册
下载
飞剑问仙飞升版
飞剑问仙飞升版
下载
腕表之家电脑版
腕表之家电脑版
下载
便撕广告贴纸快速打印程序v1.0绿色版
便撕广告贴纸快速打印程序v1.0绿色版
下载
ADMtekAN983x64位驱动程序forWin7
ADMtekAN983x64位驱动程序forWin7
下载
密室逃脱逃离学校
密室逃脱逃离学校
下载
龙龙内存遍历工具v1.0绿色版
龙龙内存遍历工具v1.0绿色版
下载
StrayBlade
StrayBlade
下载
广告清理助手
广告清理助手
下载
照照乐家长端
照照乐家长端
下载
雨时天气
雨时天气
下载
西部牛仔破解版
西部牛仔破解版
下载
恋之宇宙战舰
恋之宇宙战舰
下载
瓢虫数字填色
瓢虫数字填色
下载