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 写了一个电子考勤系统,源码获取在下方文章中给出,记得点赞收藏哦- 文章目录 电子考勤完整代码 项目简介 答题要求 附加功能 导入模 ...
最新文章
- 分页控件 WebPager [ZT]
- Java多线程编程实战指南
- ubuntu安装npm(npm install)时报错:run `npm audit fix` to fix them, or `npm audit` for details
- Conda环境搭建记录
- docker ubuntu 文件同步_Docker 的数据管理--Docker从入门到精通摘记
- jquery post php返回html,jquery ajax post 提交数据,返回的是当前网页的html?
- 华为不做黑寡妇,开源编译器,与友商共建安卓性能
- python缩进注意事项_python注意事项
- c++程序设计中的多态与虚函数知识点
- 特征筛选9——根据重要性SelectFromModel筛选特征(有监督筛选)
- springcloud 高可用的服务注册中心
- 大数据hadoop,spark,flink等经典电子书PDF下载
- 基于GEE使用Landsat 8和Landsat 5影像计算RSEI
- 【UV打印机】RYPC打印软件教程(一)-软件简介
- 主成分分析法(三):计算步骤
- 无根树(无环连通无向图)的Prufer编码
- mino文件服务器,mimo技术有什么用_mino技术原理解析
- 服务器重启后samba启动不了,提示stop: Unknown instance: smbd start/running, process 76585...
- 【小程序模板】功能模块+红色招聘信息资讯小程序网页模板+行业职位招聘小程序+招聘信息网页下载
- html5 canvas 显示文字,如何使用HTML5canvas绘制文字
热门文章
- Oracle与mongodb的区别
- Java黑皮书课后题第10章:*10.5(显示素数因子)编写一个程序,提示用户输入一个正整数,然后以降序显示它的所有最小因子
- C语言学习之企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提成10%;
- 【Django】基于Django架构网站代码的目录结构---转载
- VS2008 Tips #008 如何创建ASP.NET Web 用户控件并包含在Web 页面中
- 网站如何从http升级成https
- UG集成显卡 显示成烂面
- jQuery的三种bind/One/Live事件绑定使用方法
- ArcGIS Server 简介
- Gridview行随鼠标变色