爬虫目标
通过微博话题获取发帖的信息
与用户基本信息
,数据可用于该话题的用户分析。
爬取字段:账号id号
、昵称
、关注数
、粉丝数
、微博数
、个性签名
、账号类型
、等级
、简介
、使用设备
所用到模块:requests
、lxml
、re
说明:
无登录爬取微博用户数据
,实现 自动获取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): pass if __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"简介:(.*?)<\\/span>",r.text).group(1).replace("\\t","").strip() except AttributeError: user_sign = " " # 关注 concern = re.search(r'">(\d*?)<\\/strong><span class=\\"S_txt2\\">关注',r.text).group(1) # 粉丝 fans = re.search(r'">(\d*?)<\\/strong><span class=\\"S_txt2\\">粉丝<\\/span>',r.text).group(1) # 微博数量 weibo_count = re.search(r'">(\d*?)<\\/strong><span class=\\"S_txt2\\">微博',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
运行结果
暂没有翻页功能,看后面补充吧!!!
版权声明:《 【爬虫项目】爬取微博话题下的用户数据 》为明妃原创文章,转载请注明出处!
最后编辑:2020-3-15 11:03:47
2022-01-15 19:26
2022-01-15 19:29