半自动化爬虫:在百度贴吧上保存网页,通过python爬取相关信息
1、需求背景:
在百度贴吧上选取一页帖子,点击右键查看源代码,将源代码保存为txt文件,通过python实现从该页面中抓取帖子的标题,作者,时间等信息,将结果保存为excel表格
2、关键技术实现:
python、正则表达式、txt文件读取、excel文件写入
3、代码实现:
import re
import csv
resultList = []
# 读取已经保存的文件内容
with open("baidutieba.txt", 'r', encoding="UTF-8") as f:
source = f.read()
#以下通过正则表达式进行相关的匹配,获取标题,作者,时间等信息
#原始文件是:<a rel="noopener" href="/p/7864139938" title="女高专一发展" target="_blank" class="j_th_tit ">女高专一发展</a>
titleRE = r'<a rel="noopener" href="/p/\d*" title="(.*?)" target='
titleList = re.findall(titleRE,source,re.S)
#原始文件是:title="主题作者: 五条永远滴神"
authorRE = 'title="主题作者: (.*?)"'
authorList = re.findall(authorRE,source,re.S)
#原始文件是:<span class="pull-right is_show_create_time" title="创建时间">18:48</span>
timeRE = '" title="创建时间">(.*?)</span>'
timeList = re.findall(timeRE,source,re.S)
#将如上的结果添加到列表里,便于后续写入到CSV格式的文档里
for i in range(len(titleList)):
result = {
"title": titleList[i],
"author": authorList[i],
"time": timeList[i]
}
resultList.append(result)
#将文件写入到excel表格里
with open('baidutieba.csv', 'w', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=['title','author','time'])
writer.writeheader()
writer.writerows(resultList)
4、运行代码,查看输出的 baidutieba.csv 文件,发现虽然能写入正确的内容,但是出现了换行。如下:
5、解决输出多加了空行的方法:
将源代码中:
with open('baidutieba.csv', 'w', encoding='utf-8-sig') as f:
修改为:
with open('baidutieba.csv', 'w', encoding='utf-8-sig', newline='') as f:
再次运行,出现的页面如图,空行问题已经解决: