微博用户信息源代码爬取_【爬虫项目】爬取微博话题下的用户数据

本文介绍了一个爬虫项目,目标是从微博话题中爬取用户的详细信息,包括账号id、昵称、关注数等。项目使用requests和lxml模块,并实现了自动获取和更新Cookie的功能,以便于无登录状态爬取数据。目前爬虫尚未实现翻页功能。
摘要由CSDN通过智能技术生成

爬虫目标

通过微博话题获取发帖的信息与用户基本信息,数据可用于该话题的用户分析。

爬取字段:账号id号、昵称、关注数、粉丝数、微博数、个性签名、账号类型、等级、简介、使用设备

所用到模块:requests、lxml、re

c42815bf28883193b45a06e59ebded4b.png

说明:无登录爬取微博用户数据,实现 自动获取Cookie和Cookie失效自动更新,还有其他技巧,自己看。

爬虫结构

class WeiBoSpider():    def __init__(self):        # 起始地址        self.url = "https://s.weibo.com/weibo?q=%23%E8%94%A1%E5%BE%90%E5%9D%A4%E7%82%B9%E8%AF%84%23&Refer=top"        # cookie         self.cookie = self.get_cookie()    # 获取所有数据    def get_data(self):        pass    # 通过 id 获取用户信息    def get_user_data(self,user_id):        pass    # 获取 & 更新 Cookie    def get_cookie(self):        passif __name__ == '__main__':    wbs = WeiBoSpider()    wbs.get_data()

获取所有数据

def get_data(self):    r = requests.get(url=self.url)    html = etree.HTML(r.text)    # 接信息网页    userdatas_list = html.xpath('//div[@id="pl_feedlist_index"]/div/div[@action-type="feed_list_item"]')    # 获取数据    users_list = list()    for userdata in userdatas_list:        # 昵称        nick_name = userdata.xpath('.//div[@class="info"]/div[2]/a/@nick-name')        # 个人页        user_id = re.search(r'/(d*?)?',userdata.xpath('.//div[@class="info"]/div[2]/a[1]/@href')[0]).group(1)        # 账号类型        user_type = userdata.xpath('.//div[@class="info"]/div[2]/a[2]/@title')        # 使用设备        equipment = userdata.xpath('.//p[@class="from"]/a[2]/text()')        # 组合数据        data = {            "nick_name":nick_name,            "user_id": user_id,            "user_type":user_type,            "equipment":equipment,            # 调用函数获取用户信息            "user_data": self.get_user_data(user_id),        }        print(data)        users_list.append(data)    return users_list

通过ID用户信息

获取用户信息时,就对Cookie有着严格的要求,但是我们实现了自动化获取Cookie。

def get_user_data(self,user_id = "2803301701"):    user_url = "https://weibo.com/u/{}".format(user_id)    headers = {        "Content-Type": "text/html; charset=utf-8",        "Host": "weibo.com",    }    r = requests.get(url=user_url,headers=headers,cookies=self.cookie)    # 判断cookie的有效性    if r.text == " ":        r = requests.get(url=user_url, headers=headers, cookies=self.get_cookie())    # 个人签名    try:        user_sign = re.search(r"简介:(.*?)",r.text).group(1).replace("","").strip()    except AttributeError:        user_sign = " "    # 关注    concern = re.search(r'">(d*?)关注',r.text).group(1)    # 粉丝    fans = re.search(r'">(d*?)粉丝',r.text).group(1)    # 微博数量    weibo_count = re.search(r'">(d*?)微博',r.text).group(1)    return {"user_sign":user_sign,"concern":concern,"fans":fans,"weibo_count":weibo_count}

Cookie 获取 & 更新

在爬取微博用户数据遇到困难的朋友可以参考以下。

def get_cookie(self):    s = requests.session()    # 获取第一个 Cookie    s.get("https://passport.weibo.com/visitor/visitor")    # 获取 tid 参数    tid_ = s.post(url="https://passport.weibo.com/visitor/genvisitor",                   data={                       "cb": "gen_callback",                       "fp": {}                   })    tid = re.search(r'{"tid":"(.+?)"', tid_.text).group(1)    # 返回需要的所有 Cookie    r = s.get(url="https://passport.weibo.com/visitor/visitor",                params={                    "a": "incarnate",                    "t": tid,                    "cb": "cross_domain",                })    cookies = r.cookies    try:        cookies["SRT"]    except KeyError:        print("获取cookie失败,真正重新获取")        return self.get_cookie()    else:        self.cookie = cookies        print(self.cookie)        return cookies

运行结果

暂没有翻页功能,看后面补充吧!!!

d02992e2d6e2aeaac8e61f17194c8dd3.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值