while not is_ele_exist(browser,“W_pages”):
num+=1
browser.execute_script(js)
print(“还未找到元素”)
#最多翻页十次,防止进入死循环
if(num>10):
break
print(“用户的一页信息已加载完毕”)
html = browser.page_source
return html
‘’’
def has_source(browser,url):
判断一个微博页面是否有微博,如果没有,返回Fasle, 最开始考虑不周到,这个函数导致需要再次用webdriver打开页面 严重拖慢爬取速度,弃用
browser.get(url) if is_ele_exist(browser,“WB_feed_handle”): return True else: return False
‘’’
def has_source(html):
‘’’
判断一个微博页面是否有微博,如果没有,返回Fasle, 改良版,不用再次加载页面 ‘’’ bs = bs4.BeautifulSoup(html,“lxml”)
if bs.find(“div”,class_=“WB_detail”) !=None:
return True
else:
return False
def getusermessage(html):
‘’’
获取用户信息,包括头像,姓名。粉丝 :param html: :return:
‘’’ user = {}
bs = bs4.BeautifulSoup(html,“lxml”)
user[“姓名”] = bs.find_all(“h1”,class_=“username”)[0].text
user[“头像”] = bs.find_all(“p”,class_=“photo_wrap”)[0].find_all(“img”)[0][“src”]
user[“认证”] = bs.find_all(“div”,class_=“pf_intro”)[0][“title”]
messagebox = bs.find_all(“div”,class_=“WB_innerwrap”)
messages = messagebox[0].find_all(“td”,class_=“S_line1”)
for message in messages:
title = message.find_all(“span”,class_=“S_txt2”)[0].text
content = message.find_all(“strong”,class_=“W_f16”)[0].text
user[title] = content
print(user)
return user
def getweibo(filename,html):
‘’’
获取一个页面上的所有信息,包括每一条微博的内容,转发,评论,点赞数量 ‘’’ file = open(filename,“a”,encoding=“utf-8”)
beautifulsoup = bs4.BeautifulSoup(html,“lxml”)
weibos = beautifulsoup.find_all(“div”,class_="WB_cardwrap WB_feed_type S_bg2 ") #获得用于显示微博的父节点
weibonum = 0 #计算该页微博数量
for weibo in weibos:
#对每一个微博父节点进行处理
weibotext = weibo.find_all(“div”,class_ = “WB_text W_f14”) #获取微博文本内容
message = weibotext[0].text.replace(" ",“”) #取出文本中的所有空格
weibonum+=1 #微博数量+1
file.write(“\n第”+str(weibonum)+“条微博内容是:”+message+“\n”)
weibopics = weibo.find_all(“div”,class_=“WB_media_wrap clearfix”) #获取用于显示图片的标签
if len(weibopics) != 0: #判断标签是否存在
pics = weibopics[0].find_all(“img”) #获取该标签中的所有图片
for pic in pics:
file.write(pic[“src”]+“\n”)
weibomessages = weibo.find_all(“div”, class_=“WB_feed_handle”) # 获取微博信息父节点
weibomessagecontents = weibomessages[0].find_all(“a”, class_=“S_txt2”) #获取用于显示微博信息的节点(包括转发,评论,点赞数量)
for weibomessagecontent in weibomessagecontents[1:]: #分别获取信息
contents = weibomessagecontent.find_all(“em”)
file.write(contents[1].text+" ")
file.close()
print(“成功存储一个页面的微博”)
return weibonum
def getpageurl(url,num):
‘’’
根据一个用户的第一页获取后续的url http://www.weibo.com/u/1858002662?c=spr_sinamkt_buy_hyww_weibo_p113&is_hot=1#1496336038914 http://www.weibo.com/u/1858002662?is_search=0&visible=0&is_hot=1&is_tag=0&profile_ftype=1&page=2#feedtop
http://weibo.com/leehom?refer_flag=1005055013_&is_all=1 http://weibo.com/leehom?is_search=0&visible=0&is_all=1&is_tag=0&profile_ftype=1&page=2#feedtop 通过分析指导,page应该是表示的页面,is_all和is_hot应该对应的是热门微博和全部微博 ‘’’ preurl = url.split(“?”)
preurl = preurl[0]
pageurl = preurl+“?is_search=0&visible=0&is_all=1&is_tag=0&profile_ftype=1&page=”+str(num)+“#feedtop”
return pageurl
def spider(url,username,password):
num = 0;
browser = login(“http://weibo.com/login.php”,username,password)
print(“开始获取第1页的微博”)
html = getweibohtml(browser,url)
file = open(“f:****\\****xuanzi.txt”,“a”,encoding=“utf-8”)
user = getusermessage(html)
for key in user.keys():
file.write(key+“:”+user[key]+“\n”)
file.close()
num += getweibo(“f:****\\****xuanzi.txt”,html)
print(“获取第1页的微博成功”)
page = 1;
while True:
page+=1
pageurl = getpageurl(url,page)
print(pageurl)
html = getweibohtml(browser, pageurl)
if has_source(html):
print(“开始获取第”+str(page)+“页的微博”)
num += getweibo(“f:****\\****xuanzi.txt”,html)
else:
return
return num
if __name__ ==“__main__”:
#browser = login(“http://weibo.com/login.php”,“15271183269”,“f43312626”)
‘’’
for cookie in cookies: if cookie[“name”] == “_s_tentry”: log_cookie = cookie break ‘’’ ‘’’ getweibohtml(“http://www.weibo.com/u/1858002662?is_search=0&visible=0&is_tag=0&profile_ftype=1&page=3&c=spr_sinamkt_buy_hyww_weibo_t113&is_all=1”, browser) ‘’’ #print(has_source(browser,“http://www.weibo.com/u/1858002662?is_search=0&visible=0&is_tag=0&profile_ftype=1&page=21&c=spr_sinamkt_buy_hyww_weibo_t113&is_all=1”))
#file = open(“f:\\test5.html”,“rb”).read() #html = file.decode(“utf-8”,“ignore”) #getweibo(html)
#url = getpageurl(“http://weibo.com/dasima315?sudaref=passport.weibo.com&is_all=1”, 4) #print(url) #num = spider(“http://www.weibo.com/u/1858002662?c=spr_sinamkt_buy_hyww_weibo_p113&is_hot=1”, “15271183269”, “f43312626”) #print(“一共获取”+str(num)+“条微博”)
spider(“http://www.weibo.com/u/1858002662?c=spr_sinamkt_buy_hyww_weibo_p113&is_hot=1”,“15271183269”,“f43312626”)
轩子局二兔的微博一共有21页,932条,以下是一部分爬取到的文件内容
姓名:轩子巨2兔
头像:http://tvax3.sinaimg.cn/crop.9.0.493.493.180/6ebedee6ly8ffq59vzv9qj20e80dpaag.jpg
认证:斗鱼直播平台签约主播
关注:293
粉丝:503619
微博:932
第1条微博内容是:
庆祝微博40万关注转发这条骚气的微博,抽5人送出100元红包加一段私人定制音频
http://wx3.sinaimg.cn/orj360/6ebedee6gy1feecnoofjvg20ap07ikjr.gif
4333 1810 3644
第2条微博内容是:
来斗鱼快两个月了,昨夜斗鱼粉丝破了100万。黑粉很失望,他们竭尽全力却无法阻止。不膨胀,继续努力做好声音!为回馈百万轩子大军,抽5人送出100元红包和一段专属音频,转发即可,截止至3月25日24点。
http://wx2.sinaimg.cn/thumb150/6ebedee6gy1fdve8bakcpj20sf0kuara.jpg
http://wx1.sinaimg.cn/thumb150/6ebedee6gy1fdve8jbtjwj20sf0kudz7.jpg
4431 1768 3184
第3条微博内容是:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。
分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的学习计划主要包括规划图和学习进度表。
分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-KWsmFZ5k-1712709401698)]