环境: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)的更多相关文章

  1. c# WPF——完成一个简单的百度贴吧爬虫客户端

    话不多说先上图 爬取10页大概500个帖子大概10s,500页2w多个帖子大概2min,由此可见性能并不是特别好,但是也没有很差. 好了话不多说,我们来一步一步实现这么个简易的客户端. 1.创建项目 ...

  2. [Python]网络爬虫(六):一个简单的百度贴吧的小爬虫

    转自:http://blog.csdn.net/pleasecallmewhy/article/details/8927832 # -*- coding: utf-8 -*- #----------- ...

  3. Python之路:爬虫之urllib库的基本使用和高级使用

    关于爬虫自己一直在看,所以时间太慢,这才第二更,有等不及的小伙伴可以慢慢的品尝了,在看下面的之前,建议先把上一章看一下.以下是关于python的Urllib的基础和高级用法. 1.如何扒下一个网站,用 ...

  4. 实用的开源百度云分享爬虫项目yunshare - 安装篇

    今天开源了一个百度云网盘爬虫项目,地址是https://github.com/callmelanmao/yunshare. 百度云分享爬虫项目 github上有好几个这样的开源项目,但是都只提供了爬虫 ...

  5. python 3.x 爬虫基础---Urllib详解

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...

  6. Python爬虫之urllib模块2

    Python爬虫之urllib模块2 本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于Beautiful ...

  7. (爬虫)urllib库

    一.爬虫简介 什么是爬虫?通俗来讲爬虫就是爬取网页数据的程序. 要了解爬虫,还需要了解HTTP协议和HTTPS协议:HTTP协议是超文本传输协议,是一种发布和接收HTML页面的传输协议:HTTPS协议 ...

  8. C# 学习之路--百度网盘爬虫设计与实现(一)

    百度网盘爬虫 现在市面上出现了很多网盘搜索引擎,写这系列博文及爬虫程序的初衷: 更方面的查找资源 学习C# 学习爬虫的设计与实现 记录学习历程 自我监督 能力有限,如有不妥之处,还请各位看官点评.同在 ...

  9. python爬虫之urllib库(二)

    python爬虫之urllib库(二) urllib库 超时设置 网页长时间无法响应的,系统会判断网页超时,无法打开网页.对于爬虫而言,我们作为网页的访问者,不能一直等着服务器给我们返回错误信息,耗费 ...

随机推荐

  1. 开机logo切换逻辑深入研究

    增加暗码命令切换开关机logo功能 u-boot logo显示原理: 1.----Little Kernel会在platform_early_init阶段首先会获取lcm params,其工作流 程就 ...

  2. 模板页显示Excel数据Gridview增删改查

    <%@ Page Title="主页" Language="C#" MasterPageFile="~/Site.master" Au ...

  3. SQLServer使用表值参数,高性能批量插入数据

    记得前段时间帮同事写了个解析账号并入库的小工具,来批量导入账号信息,账号量相当大,程序每读取一条记录便执行一次insert来插入数据,整整跑了一下午才把账号全部入库. 今天又接到同事类似的需求,不过这 ...

  4. sqlite中的自增主键

    http://stackoverflow.com/questions/8519936/sqlite-autoincrement-primary-key-questions I'm not sure w ...

  5. CurlSharp

    https://github.com/masroore/CurlSharp clone版本库之后,在本地使用,会遇到找不到dll的情况 编译EasyGet项目之后,进行调试,会提示 System.Ba ...

  6. Spring整合Hibernate图文步骤

    首先建立java Project工程 点击Finish完成 添加Hibernate和Spring所需要的jar包还有Mysql连接的jar包 创建Dao层,Dao层实现,Model层,Service层 ...

  7. [HDOJ4609]3-idiots(FFT,计数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:n个数,问取三个数可以构成三角形的组合数. FFT预处理出两个数的组合情况,然后枚举第三个 ...

  8. CUBRID学习笔记 32 对net的datatable的支持 cubrid教程

    在net的驱动中实现理一下的支持 DataTable data populate Built-in commands construct: INSERT , UPDATE, DELETE Column ...

  9. 虚拟机guest为windows7的环境下安装破解版simplify3d_3.0.2

    情形: 1.主机(host):ubuntu 2.虚拟机里安装的操作系统版本(guest):windows 7专业版 3.simplify3d破解版版本:3.0.2(破解需要的工具均在下文的百度云地址里 ...

  10. "npm ERR! Error: EPERM: operation not permitted"问题解决

    在基于macaca进行自动化测试的时候,遇到如下问题: E:\AutoTest\Macaca\LocalTEST\macaca-test-sample\macaca-test>macaca do ...