600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 爬取新浪微博用户的个人信息和微博内容

爬取新浪微博用户的个人信息和微博内容

时间:2023-02-08 08:33:50

相关推荐

爬取新浪微博用户的个人信息和微博内容

#-*- coding:utf-8 -*-"""爬取新浪微博的用户信息功能:用户ID 用户名 粉丝数 关注数 微博数 微博内容网址: 数据量更少相对于 """import timeimport reimport osimport sysimport codecsimport shutilimport urllibfrom selenium import webdriverfrom mon.keys import Keysimport selenium.webdriver.support.ui as uifrom mon.action_chains import ActionChains#先调用无界面浏览的浏览器 PhantomJS 或Firefoxdriver=webdriver.Firefox()wait=ui.WebDriverWait(driver,10)#全局变量 文件操作的读写信息inforead=codecs.open("SinaWeibo_List.txt",'r','utf-8')infofile=codecs.open("SinaWeibo_Info.txt",'a','utf-8')def LoginWeibo(username,password):try:print u'准备登陆网站..'driver.get("/login/")elem_user=driver.find_element_by_name("mobile")elem_user.send_keys(username) #用户名elem_pwd=driver.find_element_by_xpath("/html/body/div[2]/form/div/input[2]")elem_pwd.send_keys(password) #密码#elem_rem=driver.find_element_by_name("remember")#elem_rem.click()#重点:暂停时间输入验证码time.sleep(30)elem_sub=driver.find_element_by_name("submit")elem_sub.click() # 点击登陆time.sleep(2)# 获取Coockie 推荐 /fnng/p/3269450.html#print driver.current_url"""print driver.get_cookies() #获得cookie信息dict 存储print u'输出cookie对应的键值信息:'for cookie in driver.get_cookies():for key in cookie:print key,cookie[key]"""print u'登陆成功...'except Exception,e:print "Error:",efinally:print u'End loginWeibo!\n\n'##第二步访问 个人页面 /3985356869def VisitPersonPage(user_id):try:global infofileprint u'准备访问个人网站...'driver.get("/"+user_id)##第一步直接获取用户昵称 微博数 关注数 粉丝数#str_name.text 是unicode 编码类型#用户idprint u'个人详细信息'print '*****************'print u'用户id:'+user_id#昵称str_name=driver.find_element_by_xpath("//div[@class='ut']")str_t=str_name.text.split(" ")num_name=str_t[0]print u'昵称:'+num_name#微博数 除了个人主页外 它默认直接显示微博数 无超链接str_wb=driver.find_element_by_xpath("//div[@class='tip2']")pattern=r"\d+\.?\d*" #正则提取"微博[0]" 但r"(\[.*?\])"总含[]guid=re.findall(pattern,str_wb.text,re.S|re.M)print str_wb.textfor value in guid:num_wb=int(value)breakprint '微博数:'+str(num_wb)#关注数目str_gz=driver.find_element_by_xpath("//div[@class='tip2']/a[1]")num_gz_temp=re.findall(pattern,str_gz.text,re.S|re.M)num_gz=int(num_gz_temp[0])print '关注数目:'+str(num_gz)#粉丝数目str_fs = driver.find_element_by_xpath("//div[@class='tip2']/a[2]")num_fs_temp = re.findall(pattern, str_fs.text, re.S | re.M)num_fs = int(num_fs_temp[0])print '粉丝数目:' + str(num_fs)# ***************************************************************************# No.2 文件操作写入信息# ***************************************************************************infofile.write('=====================================================================\r\n')infofile.write(u'用户: ' + user_id + '\r\n')infofile.write(u'昵称: ' + num_name + '\r\n')infofile.write(u'微博数: ' + str(num_wb) + '\r\n')infofile.write(u'关注数: ' + str(num_gz) + '\r\n')infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')infofile.write(u'微博内容: ' + '\r\n\r\n')#获取微博内容#/+ user_id +?filter=0&page=1# 其中 filter=0 表示全部 filter=1 表示原创print '\n'print u'获取微博的内容信息'num=1while num<=5:url_wb='/'+user_id+"?filter=0&page="+str(num)driver.get(url_wb)info_temp="//div[@class='c'][{0}]"num_temp=1while True:info = driver.find_element_by_xpath(info_temp.format(num_temp)).textprint infoif u'设置:皮肤.图片' not in info:if info.startswith(u'转发'):print u'转发微博'infofile.write(u'转发微博\r\n')else:print u'原创微博'infofile.write(u'原创微博\r\n')# 获取最后一个点赞数 因为转发是后有个点赞数str1 = info.split(u"赞")[-1]if str1:val1 = re.match(r'\[(.*?)\]', str1).groups()[0]print re.match(r'\[(.*?)\]', str1).groups()print u'点赞数: ' + val1infofile.write(u'点赞数: ' + str(val1) + '\r\n')str2 = info.split(u"转发")[-1]if str2:val2 = re.match(r'\[(.*?)\]', str2).groups()[0]print u'转发数: ' + val2infofile.write(u'转发数: ' + str(val2) + '\r\n')str3 = info.split(u"评论")[-1]if str3:val3 = re.match(r'\[(.*?)\]', str3).groups()[0]print u'评论数: ' + val3infofile.write(u'评论数: ' + str(val3) + '\r\n')str4 = info.split(u"收藏 ")[-1]flag = str4.find(u"来自")print u'时间: ' + str4[:flag]infofile.write(u'时间: ' + str4[:flag] + '\r\n')print u'微博内容:'print info[:info.rindex(u" 赞")] # 后去最后一个赞位置infofile.write(info[:info.rindex(u" 赞")] + '\r\n')infofile.write('\r\n')print '\n'else:print u'跳过', '\n'breaknum_temp+=1num+=1except Exception, e:print "Error: ", efinally:print u'VisitPersonPage!\n'print '**********************************************\n'if __name__ == '__main__':#定义变量username = '124123' #输入你的用户名password = '******'#输入你的密码#操作函数LoginWeibo(username, password)#登陆微博user_id=inforead.readline()while user_id!="":user_id=user_id.rstrip('\r\n')VisitPersonPage(user_id)user_id=inforead.readline()infofile.close()inforead.close()

github地址:/wu-yy/SinaCrawler

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。