简单的百度贴吧爬虫实现(urllib)
环境:ubuntu 16.04 LTS (X86-64),pycharm
python版本 :3.5.1+
#生成的文件默认会保存到代码所在根目录 1 import urllib.request,urllib.error,re class Tool:
removeImg=re.compile('<img.*?| {7}|')
removeAddr=re.compile('<a.*?|</a>')
replaceLine=re.compile('<tr>|<div>|</div>|</p>')
replaceTD=re.compile('<td>')
replaceBR=re.compile('<br></br>|br')
replaceExtra=re.compile('<.*?>')
def replace(self,x):
x=re.sub(self.removeImg,"",x)
x=re.sub(self.removeAddr,"",x)
x=re.sub(self.replaceLine,"\n",x)
x=re.sub(self.replaceTD,"\t",x)
x=re.sub(self.replaceBR,"\n",x)
x=re.sub(self.replaceExtra,"",x)
return x.strip() class BDTB:
def __init__(self,baseUrl,see_lz):
self.tool=Tool()
self.baseurl=baseUrl+'?see_lz='+str(see_lz)+'&pn='
self.defaultTitle=u'百度贴吧' def getPage(self,pagenum):
try:
url=self.baseurl+str(pagenum)
request=urllib.request.Request(url)
response=urllib.request.urlopen(request)
content = response.read().decode('utf-8')
return content
except urllib.error.URLError as e:
if hasattr(e,"reason"):
print(u'connect error reason:'+e.reason)
if hasattr(e,'code'):
print(u'connect error,reason:'+e.code) def getPns(self,content):
pattern = re.compile('<li class="l_reply_num".*?<span class="red">(.*?)</span>', re.S)
pns = int((re.findall(pattern, content))[0])
return pns def getTitle(self,content):
pattern=re.compile('<h3 class="core_title_txt pull-left text-overflow ".*?>(.*?)</h3>',re.S)
return str((re.findall(pattern,content))[0]) def getContent(self,content):
pattern=re.compile('<ul class="p_author".*?<li class="d_name".*?target="_blank">(.*?)</a>.*?<div id="post_content_.*?>(.*?)</div>',re.S)
items=re.findall(pattern,content)
contents=[]
for item in items:
content='Username: '+item[0]+' content: '+self.tool.replace(item[1])+'\n'
contents.append(content)
return contents def setFileTitle(self,Title):
if Title is not None:
self.file=open(Title+'.txt','w+')
else:
self.file=open(self.defaultTitle+'.txt','w+') def WriteData(self,contents):
for content in contents:
self.file.write(content) def start(self):
Pns=self.getPns(self.getPage(1))
self.setFileTitle(self.getTitle(self.getPage(1)))
for i in range(Pns):
print('Page Sum:'+str(Pns)+'\n')
print('Now is Write page:'+str(i)+'\n')
self.WriteData(self.getContent(self.getPage(i)))
self.file.close() print('please enter discussion num:')
url='http://tieba.baidu.com/p/'+str(input())
see_lz=input('Whether just see lz(enter 0 or 1)')
bdtb=BDTB(url,see_lz)
bdtb.start()
运行结果:
简单的百度贴吧爬虫实现(urllib)的更多相关文章
- c# WPF——完成一个简单的百度贴吧爬虫客户端
话不多说先上图 爬取10页大概500个帖子大概10s,500页2w多个帖子大概2min,由此可见性能并不是特别好,但是也没有很差. 好了话不多说,我们来一步一步实现这么个简易的客户端. 1.创建项目 ...
- [Python]网络爬虫(六):一个简单的百度贴吧的小爬虫
转自:http://blog.csdn.net/pleasecallmewhy/article/details/8927832 # -*- coding: utf-8 -*- #----------- ...
- Python之路:爬虫之urllib库的基本使用和高级使用
关于爬虫自己一直在看,所以时间太慢,这才第二更,有等不及的小伙伴可以慢慢的品尝了,在看下面的之前,建议先把上一章看一下.以下是关于python的Urllib的基础和高级用法. 1.如何扒下一个网站,用 ...
- 实用的开源百度云分享爬虫项目yunshare - 安装篇
今天开源了一个百度云网盘爬虫项目,地址是https://github.com/callmelanmao/yunshare. 百度云分享爬虫项目 github上有好几个这样的开源项目,但是都只提供了爬虫 ...
- python 3.x 爬虫基础---Urllib详解
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...
- Python爬虫之urllib模块2
Python爬虫之urllib模块2 本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于Beautiful ...
- (爬虫)urllib库
一.爬虫简介 什么是爬虫?通俗来讲爬虫就是爬取网页数据的程序. 要了解爬虫,还需要了解HTTP协议和HTTPS协议:HTTP协议是超文本传输协议,是一种发布和接收HTML页面的传输协议:HTTPS协议 ...
- C# 学习之路--百度网盘爬虫设计与实现(一)
百度网盘爬虫 现在市面上出现了很多网盘搜索引擎,写这系列博文及爬虫程序的初衷: 更方面的查找资源 学习C# 学习爬虫的设计与实现 记录学习历程 自我监督 能力有限,如有不妥之处,还请各位看官点评.同在 ...
- python爬虫之urllib库(二)
python爬虫之urllib库(二) urllib库 超时设置 网页长时间无法响应的,系统会判断网页超时,无法打开网页.对于爬虫而言,我们作为网页的访问者,不能一直等着服务器给我们返回错误信息,耗费 ...
随机推荐
- SAP ST03N工作负载的后台作业定义
ST03N可以把SAP的运行情况的统计数据展现出来,根据这些数据可以进行性能的分析. 1.登录到000集团,定义作业SAP_COLLECTOR_FOR_PERFMONITOR,周期每个小时执行.作业内 ...
- DEV界面皮肤
1.添加一个 2.添加引用: 3.添加一个SkinTools类 public class SkinTools { /// <summary> /// 在Program中调用 /// < ...
- [Gym]2008-2009 ACM-ICPC, NEERC, Moscow Subregional Contest
比赛链接:http://codeforces.com/gym/100861 A模拟,注意两个特殊的缩写. #include <bits/stdc++.h> using namespace ...
- python_way ,day2 字符串,列表,字典,时间模块
python_way ,day2 字符串,列表,字典,自学时间模块 1.input: 2.0 3.0 区别 2.0中 如果要要用户交互输入字符串: name=raw_input() 如果 name=i ...
- 自定义CSS博客(转)
摘自:http://www.cnblogs.com/libaoheng/archive/2012/03/19/2406836.html 前 言 一个好的阅读体验,对技术博客来说,也许算是锦上添花.入 ...
- linux2.6内核compat_ioctl函数
一.内核原型(linux2.6.28-7) long (*compat_ioctl)(struct tty_struct *tty, struct file * file, ...
- Oracle 10g实现存储过程异步调用
DBMS_JOB是什么?DBMS_JOB是Oracle数据库提供的专家程序包的一个.主要用来在后台运行程序,是数据库中一个极好的工具. 可用于自动调整调度例程任务,例如分析数据表,执行一些归档操作,清 ...
- Linux小知识
1,ubuntu下,开机如何进行命令行? 图形模式下,首先进入终端: 1. 找到 /etc/default/grub文件: 2. 修改 GRUB_CMDLINE_LINUX_DEFAULT=" ...
- active developer path ("") does not exist
pod update --verbose --no-repo-update 出现的错误. 解决:在终端中修改你的CommandLine Tools的位置: xcode-select -switch / ...
- JavaMail 发送邮件案例
#----------------这两个是构建session必须的字段---------- #smtp服务器 mail.smtp.host=smtp.exmail.qq.com #身份验证 mail. ...