采集贴吧信息
打开贴吧的某一个帖子,将源代码保存下来为source.txt,提取其中的用户名、发帖内容和发帖时间,保存为result.csv页面。
分析页面
用户名
<a
data-field="{"un":"\u4f60\u978b\u5e95\u7834\u4e86","id":"255fe4bda0e99e8be5ba95e7a0b4e4ba86003a?t=1387688649"}"
alog-group="p_author"
class="p_author_name j_user_card"
href="/home/main?un=%E4%BD%A0%E9%9E%8B%E5%BA%95%E7%A0%B4%E4%BA%86&ie=utf-8&id=255fe4bda0e99e8be5ba95e7a0b4e4ba86003a?t=1387688649&fr=pb"
target="_blank">你鞋底破了</a>
有个专门的class="p_author_name j_user_card"
另一个地方
<img username="你鞋底破了" class="" src="https://gss0.bdstatic.com/6LZ1dD3d1sgCo2Kml5_Y_D3/sys/portrait/item/255fe4bda0e99e8be5ba95e7a0b4e4ba86003a?t=1387688649"/></a>
正则
username="(.*?)"
帖子内容
<div
id="post_content_127415910631"
class="d_post_content j_d_post_content "
style="display:;">
其实网络暴力才是目前最大的阻碍,其他方面一时半会也解决不了,男篮本来实力就不行,靠着东道主主场优势跟一口气吊着的,这可好,打波兰输了看看那网络暴力,精气神儿都给喷没了,运动员估计没几个睡的着的,打委内瑞拉就显露出来了,想使劲使不出,拼都不知道该咋拼了,真棒,喷子们继续吧,讨论归讨论,施压归施压,网络暴力是几个意思?看看那些新出的名次,你们是爽了,男篮成绩会更差的</div>
有个专门的class="d_post_content j_d_post_content "
正则
class="d_post_content j_d_post_content "(.*?)<
发帖时间
<div class="post-tail-wrap">
<span class="j_jb_ele">
<a rel="noopener" href="###" class="tail-info" data-checkun="un">
<img class="icon-jubao" src="//tb2.bdstatic.com/tb/static-pb/img/jubao_button_5f60185.png">
</a>
</span>
<span class="tail-info">
来自<a rel="noopener" data-tip="超萌态动画表情来袭,速度抢先体验!" href="http://c.tieba.baidu.com/c/s/download/pc?src=webtbGF" target="_blank">
Android客户端</a>
</span>
<span class="tail-info">2楼</span>
<span class="tail-info">2019-09-05 11:03</span>
</div>
有个class="post-tail-wrap"
且为最后一个。x
正则
tail-info">(201[0-9].*?)<
方法
方法一
分别匹配用户名、帖子内容、回复时间,然后组装成字典,组成csv数据
import re
import csv
with open('source.txt', encoding='utf-8') as f:
source = f.read()
result_list = []
username_list = re.findall('username="(.*?)"', source, re.S)
content_list = re.findall('d_post_content j_d_post_content " style=\"display:;\"> (.*?)<', source, re.S)
reply_time_list = re.findall('tail-info">(201[0-9].*?)<', source, re.S)
for i in range(len(username_list)):
result = {'用户名': username_list[i], '帖子': content_list[i], '回复时间': reply_time_list[i]}
result_list.append(result)
with open('tieba.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['用户名', '帖子', '回复时间'])
writer.writeheader()
writer.writerows(result_list)
方法二
采集某一个帖子的所有数据,从数据中取出用户名、帖子内容、密码然后组装成csv数据