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)