简单的百度贴吧爬虫实现(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库 超时设置 网页长时间无法响应的,系统会判断网页超时,无法打开网页.对于爬虫而言,我们作为网页的访问者,不能一直等着服务器给我们返回错误信息,耗费 ...
随机推荐
- HDU 5059 Harry And Biological Teacher
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5069 题意:给出n个串,m个询问,每个询问(u,v),求u的一个最长后缀是v的前缀. 思路:离线.将关于u ...
- BZOJ 2132 圈地计划(最小割)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2132 题意:n*m的格子染色黑白,对于格子(i,j)染黑色则价值为A[i][j],白色为 ...
- Windows安装Python包下载工具pip遇到的问题
到Python的官网下载get-pip.py文件,然后按照说明进行安装. 在安装过程中,我遇到以下问题: cmd的codepage引起的编码错误,提示65001编码错误,通过chcp 936切换到默认 ...
- Creating, Stopping, Re-Starting and Deleting a Timer in Oracle Forms
I have written many posts previously on Timers in Oracle Forms like how to change images randomly wi ...
- s2-029 Struts2 标签远程代码执行分析(含POC)
1.标签介绍 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件 ...
- JAVA排序--[冒泡排序]
package com.array; public class Sort_MaoPao { /** * 项目名称:冒泡排序 * 项目要求:用JAVA对数组进行排序,并运用冒泡排序算法 * 作者:Sev ...
- Python入门-多行语句
1. Python语句中一般以新行作为为语句的结束符. 但是我们可以使用斜杠( \)将一行的语句分为多行显示. 2. 语句中包含[], {} 或 () 括号就不需要使用多行连接符. days = [' ...
- Thinkphp 3.2 添加 验证码 如何添加。
1,在home模块indexController.class.php中,加入以下代码 <?php namespace Home\Controller; use Think\Controller; ...
- XML约束——Schema约束
XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性 XML Schema VS DTD: •XML Schema符合XML语法结构. • ...
- iOS - Delegate 代理
1.Delegate 1.1 协议 协议:是多个类共享的一个方法列表.协议中列出的方法没有相应的实现,计划由其他人来实现.协议中列出的方法,有些是可以选择实现,有些是必须实现. 1>.如果你定义 ...