python 爬虫 采集联盟信息
【摘要】 用于采集联盟数据,比如 联盟名 、简介、成员数、话题数、总浏览量、总回复量,以及帖子信息
效果:
git项目地址:https://gitee.com/1091198228/huaweilianmengshujucaiji
开发日志
2020年8月3日00点51分:
+帖子.作者
pname=tree.xpath('//a[@class="poPname"]/text()') pname Out[5]: ['HW小龙', 'HW小龙', 'HW小龙', 'HW小龙', 'HW小龙', 'HW小龙', 'HW小龙', 'HW小龙', 'HW小龙', 'HW小龙', 'HW小龙', 'HW小龙', 'HW小龙']
[+]帖子.发表日期
本来想从联盟的主页提取帖子的发表日期
#规则写出来之后是这样的,很明显,多了“发表于”这三个字。 #还需要写个循环去消除这三个字,挺麻烦的。下个版本可能会直接从帖子里面提取(这种方式会影响帖子的浏览量) time=tree.xpath('//span[@title]/@title | //span[@class="poPtime" and not(span)]/text()') time Out[14]: ['2020-8-1', '2020-7-31', '发表于2020-6-17', '2020-7-31', '发表于2020-7-13', '2020-7-30', '发表于2020-7-16', '发表于2020-7-20', '发表于2020-7-21', '发表于2020-7-18', '发表于2020-7-17', '发表于2020-7-9', '发表于2020-7-1']
+表格保存为html网页
效果:
代码片段:
import datetime #获取当前日期 nowdate=datetime.datetime.now() #获取年月,因为是按月统计所以日暂时用不着 mytime=nowdate.strftime("%Y")+"年"+nowdate.strftime("%m")+"月" if input("是否保存数据为html?[y/n]:") == "y": style='<style type="text/css">table{width:90%;background:#ccc;margin:10px auto;border-collapse:collapse;}th,td{height:25px;line-height:25px;text-align:center;border:1px solid #ccc;}th{background:#eee;font-weight:normal;}tr{background:#fff;}tr:hover{background:#cc0;}td a{color:#06f;text-decoration:none;}td a:hover{color:#06f;text-decoration:underline;}</style>' htmlfile=mytime+lminfo["unScNa"]+".html" htmlbody= style + itmes_tab(sumitmes).get_html_string()+lminfo_tab(lminfo).get_html_string() f = open(htmlfile,"w") f.write(htmlbody) f.close() print("保存成功:文件名:",htmlfile) os.system(htmlfile) #打开网页
+主题发表日期
#爬取发表日期,返回一个日期列表 time=tree.xpath('//span[@title]/@title | //span[@class="poPtime" and not(span)]/text()') #由于日期提取后自带“发表于”这三个字,所以写个循环删掉 for t in range(len(time)): time[t]=time[t].strip("发表于")
精确到日,预计3.0版本会精确到分钟(可能会影响统计结果)
+显示联盟人员发帖树图
结构化数据后生成echarts图表数据。目前觉得这个功能意义不大。。。
效果:
if input("是否保存数据?[y/n]")=="y": print("准备保存数据ing") datajson={"name":lminfo["unScNa"],"children":[]} namelist={} for i in sumitmes[0]: if i["pname"] in namelist: namelist[i["pname"]].append({"name":i["title"]}) else: namelist[i["pname"]]=[] namelist[i["pname"]].append({"name":i["title"]}) for i in namelist: print(i) datajson["children"].append({"name":i,"children":namelist[i]}) print(json.dumps(datajson,ensure_ascii=False))
<body> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.0.0-alpha.1/echarts.js"></script> <div id="main" style="width: 100%;height: 2000px;"></div> <script type="text/javascript"> // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('main')); // 指定图表的配置项和数据 myChart.setOption(option = { tooltip: { trigger: 'item', triggerOn: 'mousemove' }, series: [{ type: 'tree', triggerOn: 'mousemove', data: [数据放到这里面], top: '1%', left: '7%', bottom: '1%', right: '20%', symbolSize: 10, symbol: 'emptyCircle', roam:'true', label: { position: 'left', verticalAlign: 'middle', align: 'right', fontSize: 20 }, leaves: { label: { position: 'right', verticalAlign: 'middle', align: 'left' } }, initialTreeDepth:1, expandAndCollapse: true, animationDuration: 550, animationDurationUpdate: 750 }] }); </script> </body>
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)