python写的一个贴吧爬虫_Python-简单百度贴吧爬虫
这里以上海工会管理职业学院为例子,目标是获取以下内容。
通过观察网页编码,可以发现以下结构:
标题:
发贴人:
内容:
接下来就是通过urllib2+re(正则表达式)来进行网页处理。
说明
1.在处理网页的时候,如果贴子是置顶的话,有时候会缺失内容项,所以添加了处理置顶贴的函数。
2.网页会有重复贴子的情况,增加了去重功能
如果如下,可以看到大部分的都是些无用的东西;没有太
#__author__='ZHENGT'
# -*- coding: utf-8 -*-
#爬取百度贴吧的内容
#参考资料:
#http://www.imekaku.com/2015/08/31/python-work-tieba2/
#http://blog.csdn.net/u010412719/article/details/50199047
#http://python.jobbole.com/81359/
#备注:百度贴吧不同页下载下来的数据会有很多重复项,需要进行去重处理
import urllib2
import re
import os
#上海工会管理职业学院
GH_url='http://tieba.baidu.com/f?ie=utf-8&kw=' \
'%E4%B8%8A%E6%B5%B7%E5%B7%A5%E4%BC%9A%E7%' \
'AE%A1%E7%90%86%E8%81%8C%E4%B8%9A%E5%AD%A6%E9%99%A2&pn='
#上海商学院
SXY_url='http://tieba.baidu.com/f?kw=' \
'%E4%B8%8A%E6%B5%B7%E5%95%86%E5%AD%A6%E9%99%A2&ie=utf-8&pn='
#上海应用技术大学
YJD_url='http://tieba.baidu.com/f?kw=' \
'%E4%B8%8A%E6%B5%B7%E5%BA%94%E7%94%A8%E6%8A%80%E6%9C%AF%E5%AD%A6%E9%99%A2&ie=utf-8&pn=1'
f1="YJD.txt"
ID_list={} #用于记录贴子ID,去重
#定义百度函数
def Baidu_Tieba(url,i_page):
try:
print '正在下载'+str(i_page)+'页..........' #获取抓取网页
html_Tieba=urllib2.urlopen(url+str(i_page)).read()
print type(html_Tieba) #显示类别,一般为str
return html_Tieba #返回值
except Exception,e: #Error
print e
def PraserHTML(WebData,i_page): #处理网页信息,WebData->>String
TopNum=0 #初始化
Titles=GetTitle(WebData) #Type-->>List
Posters=GetPoster(WebData) #Type-->>List
Contents=GetContent(WebData) #Type-->>List
IconTop=GetTop(WebData) #Type-->List
TopNum=len(IconTop) #置顶贴子数
if TopNum>0: #记录页面置页贴子
for i in range(0,len(Titles)): #根据标题列表循环
title=ReplaceTitle(Titles[i])
IDs = title.split(' ') #按空格分割,获取ID号码
ID_list[IDs[0]] = IDs[1] #添加字典
poster=ReplacePoster(Posters[i])
if i<=TopNum: #处理置顶贴
content = "IconTop"
else:
content=ReplaceContent(Contents[i-TopNum])
Write_To_File(title,poster,content)
else:
for i in range(0,len(Titles)): #根据标题列表循环
title=ReplaceTitle(Titles[i])
IDs=title.split(' ') #按空格分割,获取ID号码
if not ID_list.has_key(IDs[0]):
ID_list[IDs[0]]=IDs[1] #添加字典
poster=ReplacePoster(Posters[i])
content=ReplaceContent(Contents[i])
Write_To_File(title,poster,content)
def ReplaceTitle(item): #替换Title不需要字符
removeHead=re.compile('
else:
return "NA"
def Write_To_File(title,poster,content): #数据写入txt文件
f=open(f1,'a')
f.write(title+"--->>>"+poster+"--->>>"+content) #主题,发贴人,内容
f.write("\n")
f.close()
def GetTitle(Data): #获取当前页主题
pattern=re.compile(r'
data=re.findall(pattern,Data)
return data
def GetTop(Data): #获取当前页内容,获取置顶贴子
pattern=re.compile(r'')
data=re.findall(pattern,Data)
return data
if __name__=='__main__': #
if os.path.exists(f1): os.remove(f1) #初始化文件
for i in range(1,11): #指定需要循环的页数
html_data=Baidu_Tieba(YJD_url,i)
PraserHTML(html_data,i)
# Write_To_File("Page----",str(i),"-----Done")
print "Done-----------------"
exit(0)
python写的一个贴吧爬虫_Python-简单百度贴吧爬虫相关推荐
- python写机器人程序_用Python写的一个多线程机器人聊天程序
本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...
- 我用Python写了一个成语接龙的游戏,并把它部署到了手机上
我用Python写了一个成语接龙的游戏,并把它部署到了手机上 成语大全数据 6月高考的前一天,我发布的一篇文章,决战高考,帮你秒变成语之王,当时只是把 http://chengyu.haoshiwen ...
- 为了帮女神完成钢琴家梦想,我用Python写了一个自动弹钢琴脚本,轻松弹奏出各种钢琴曲!
事情是这样的,女神马上要毕业了,前两天跟我彻夜长谈,还说自己一直有个钢琴家的梦想. 这不为了帮女神圆梦,在我经过一番苦思冥想之后,终于用Python写了一个自动弹钢琴脚本,不会钢琴的都能成为钢琴家. ...
- 使用python写的一个小系统
最近在学习python写了一个学生管理系统,参考使用python创建学生管理系统_宇同学的博客-CSDN博客_python学生管理系统(感谢大牛的分享),不过小编对部分代码可读性进行了调整并新增了部分 ...
- 用 python 写了一个日记本
写一个随机任务抽取器 一.前言 二.逻辑构思 2.1 目标实现 2.2 搭建开发环境 2.3 Pyinstaller 打包 三.效果展示 3.1 初始化和添加日记 3.2 查看日记 3.3 删除日记 ...
- python卖水果_小姨开水果店的,所以今天用Python写了一个水果店小系统!
原标题:小姨开水果店的,所以今天用Python写了一个水果店小系统! 前言 今天晚上才刚下班,小姨就提了我最爱吃的榴莲过来,说不吃就坏了. 我一眼就看破了她的用意,哈哈哈 我这个小姨也是一起长大的,她 ...
- 用python写的一个简易的云音乐播放器
本人最近在学习python,在看了一些教程后,用python写了一个简单的云音乐播放器,下面把主要代码贴上来,其中用到了github上他人写的一个汉字转拼音的库,大家可以在github上找到. #co ...
- 用python写了一个简易的记账软件,后期有可能更新!
记账程序由来 曾经在iOS14的快截指令中写了一个快捷指令用来记账,但是由于快捷指令的限制,只能把数据记录到备忘录或者numbers,数据的迁移性很差.所以最后干脆用python写了一个程序 程序介绍 ...
- 用Python写了一个电子考勤系统!
今天给大家分享一个比较有意思的Python应用,用 Python 写了一个电子考勤系统,源码已在文章全部给出,记得点赞收藏哦- 项目简介 学校现在需要实现一个电子考勤系统,考虑到你们班已经学过大数据应 ...
- 耗时半年,用 Python 写了一个电子考勤系统
今天给大家分享一个比较有意思的 Python 应用,用 Python 写了一个电子考勤系统,源码获取在下方文章中给出,记得点赞收藏哦- 文章目录 电子考勤完整代码 项目简介 答题要求 附加功能 导入模 ...
最新文章
- MongoDB之bson的介绍
- 廖雪峰Java1-2Java程序基础-3整数运算
- 【转】C++11 并发指南五(std::condition_variable 详解)
- 编译 PHP7.0为什么那么慢,CentOS 7编译安装php7.0.7以及可能遇到的问题的解决方案...
- pycharm 类型注释_学习Python第一步,变量与数据类型
- 宣告推出.NET Core 3.0 Preview 7
- Guayadeque成为音乐爱好者的开源播放器的6个原因
- 一脸懵逼的算法系列之汉诺塔
- 嵌入式开发需要学习哪些东西
- Matlab——常用函数的用法总结(部分直接摘自mathwork,持续更新)
- 案例:世界500强如何打造汽车后市场智慧门店
- JavaMail简易教程
- R语言入门(15)_读取文件(read)
- RLException: [xx.launch] is neither a launch file in package [x] nor is [x] a launch file name的解决方法
- 【我的读书】《薛兆丰经济学讲义》助你变得更理性、悦纳和进取
- python俩种方法画日本国旗
- Machine Learning in Action(5) SVM算法
- 汇编语言王爽课程设计二
- vs code文件的打开和运行
- 第十周博文作业:项目1 求个人所得税
热门文章
- OpenCV C++ 04 - Change Brightness
- 安装oel6.3 操作系统
- Luogu_2774 方格取数问题
- KMP算法的nextval[] 即优化next[]
- DWR第六篇之文件下载
- 深入了解UIAutomation 的API
- Atitit. Atiposter 发帖机 新特性 poster new feature v7 q39
- windows剪切板暂存
- bashrc, bash_profile etc;
- asp.net2.0导出pdf文件完美解决方案(转载)