简单的百度贴吧爬虫实现

环境:ubuntu 16.04 LTS   (X86-64),pycharm

python版本 :3.5.1+

#生成的文件默认会保存到代码所在根目录

 1 import urllib.request,urllib.error,re
 2
 3 class Tool:
 4     removeImg=re.compile(‘<img.*?| {7}|‘)
 5     removeAddr=re.compile(‘<a.*?|</a>‘)
 6     replaceLine=re.compile(‘<tr>|<div>|</div>|</p>‘)
 7     replaceTD=re.compile(‘<td>‘)
 8     replaceBR=re.compile(‘<br></br>|br‘)
 9     replaceExtra=re.compile(‘<.*?>‘)
10     def replace(self,x):
11         x=re.sub(self.removeImg,"",x)
12         x=re.sub(self.removeAddr,"",x)
13         x=re.sub(self.replaceLine,"\n",x)
14         x=re.sub(self.replaceTD,"\t",x)
15         x=re.sub(self.replaceBR,"\n",x)
16         x=re.sub(self.replaceExtra,"",x)
17         return x.strip()
18
20 class BDTB:
21     def __init__(self,baseUrl,see_lz):
22         self.tool=Tool()
23         self.baseurl=baseUrl+‘?see_lz=‘+str(see_lz)+‘&pn=‘
24         self.defaultTitle=u‘百度贴吧‘
25
26     def getPage(self,pagenum):
27         try:
28             url=self.baseurl+str(pagenum)
29             request=urllib.request.Request(url)
30             response=urllib.request.urlopen(request)
31             content = response.read().decode(‘utf-8‘)
32             return content
33         except urllib.error.URLError as e:
34             if hasattr(e,"reason"):
35                 print(u‘connect error reason:‘+e.reason)
36             if hasattr(e,‘code‘):
37                 print(u‘connect error,reason:‘+e.code)
38
39     def getPns(self,content):
40         pattern = re.compile(‘<li class="l_reply_num".*?<span class="red">(.*?)</span>‘, re.S)
41         pns = int((re.findall(pattern, content))[0])
42         return pns
43
44     def getTitle(self,content):
45         pattern=re.compile(‘<h3 class="core_title_txt pull-left text-overflow  ".*?>(.*?)</h3>‘,re.S)
46         return str((re.findall(pattern,content))[0])
47
48     def getContent(self,content):
49         pattern=re.compile(‘<ul class="p_author".*?<li class="d_name".*?target="_blank">(.*?)</a>.*?<div id="post_content_.*?>(.*?)</div>‘,re.S)
50         items=re.findall(pattern,content)
51         contents=[]
52         for item in items:
53             content=‘Username:   ‘+item[0]+‘   content:   ‘+self.tool.replace(item[1])+‘\n‘
54             contents.append(content)
55         return contents
56
57     def setFileTitle(self,Title):
58         if Title is not None:
59             self.file=open(Title+‘.txt‘,‘w+‘)
60         else:
61             self.file=open(self.defaultTitle+‘.txt‘,‘w+‘)
62
63     def WriteData(self,contents):
64         for content in contents:
65             self.file.write(content)
66
67     def start(self):
68         Pns=self.getPns(self.getPage(1))
69         self.setFileTitle(self.getTitle(self.getPage(1)))
70         for i in range(Pns):
71             print(‘Page Sum:‘+str(Pns)+‘\n‘)
72             print(‘Now is Write page:‘+str(i)+‘\n‘)
73             self.WriteData(self.getContent(self.getPage(i)))
74         self.file.close()
75
76 print(‘please enter discussion num:‘)
77 url=‘http://tieba.baidu.com/p/‘+str(input())
78 see_lz=input(‘Whether just see lz(enter 0 or 1)‘)
79 bdtb=BDTB(url,see_lz)
80 bdtb.start()

运行结果:

时间: 2024-12-28 16:59:04

简单的百度贴吧爬虫实现的相关文章

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

今天开源了一个百度云网盘爬虫项目,地址是https://github.com/callmelanmao/yunshare. 百度云分享爬虫项目 github上有好几个这样的开源项目,但是都只提供了爬虫部分,这个项目在爬虫的基础上还增加了保存数据,建立elasticsearch索引的模块,可以用在实际生产环境中,不过web模块还是需要自己开发 安装# 安装node.js和pm2,node用来运行爬虫程序和索引程序,pm2用来管理node任务 安装mysql和mongodb,mysql用来保存爬虫数

开源百度云分享爬虫项目yunshare最新分享 - 安装篇

今天开源了一个百度云网盘爬虫项目,地址是https://github.com/callmelanmao/yunshare. 百度云分享爬虫项目 github上有好几个这样的开源项目,但是都只提供了爬虫部分,这个项目在爬虫的基础上还增加了保存数据,建立elasticsearch索引的模块,可以用在实际生产环境中,不过web模块还是需要自己开发 安装 安装node.js和pm2,node用来运行爬虫程序和索引程序,pm2用来管理node任务 安装mysql和mongodb,mysql用来保存爬虫数据

python实现简单的百度云自动下载

最近女同让我帮助从百度云下载200个文件,给了我连接和提取码,这种重复的工作不适合人做写了一个简单的爬虫 #coding=utf-8 ''' 自动填写提取码下载百度云资源 方法: for 读取文件中的连接和提取码 1 打开网页(link) 2 输入提取码 3 下载 ''' from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chr

小练习:用jQuery简单模拟百度搜索框的提示功能

今天第一次接触jQuery,用jQuery模拟了一下百度搜索的自动提示功能.连带jQuery的基本知识点,简单总结如下: 首先得在工程中导入插件:jquery-1.4.2.js ,并在html的head中引入该js: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html>

iOS将简单的百度地图SDK集成到项目中

最近在玩百度地图API,期间遇到很多问题,只能说明我蠢.现在一一记录下来,以后用到可以回来复习一下. 下载iOS的SDK,下载地址为:http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download 新建工程,获取 Bundle identifier,比如:com.winson.test.cstest  注意灰色的cstest,是要手写进去的(very important): 回到百度地图API首页,如果你还不是开发

百度网盘爬虫(如何爬取百度网盘)

因为要做去转盘网(分类模式点我),所以一定要爬取网盘资源,本来想自己写一个爬虫挺不容易的,不想分享出来,但最后还是决定了拿给大家一起看吧,毕竟有交流才有进步,有兴趣的朋友也可以看看我写的其他日志或者关注我,会发现去转盘网的大部分技术现在可以说是公开状态,如有对你有帮助还是认真读读吧,下面是爬虫代码,我立马公开: ps:不会python的孩子先去学学python,代码是python写的 我附上点资料:点我下载1 点我下载2 其实还有个磁力站,不过暂时技术不想公开出来,之后也想公开,喜欢的看看:ok

C# 简单的百度推送代码

前段时间搞推送来着,安卓方面用到了百度的推送服务,由于只是简单的用到安卓推送的通知功能,所以没用百度推荐的C# SDK,通过借鉴网上的各种资料和百度的API,费了老大劲终于折腾出来一段能用的代码(早知道这么纠结,直接用别人的了...强迫症伤不起啊) /// <summary> /// 百度推送 /// </summary> public class BaiduPush { private const string method = "push_msg"; pri

百度图片小爬虫

刚学习爬虫,写了一个百度图片爬虫当作练习. 环境:python3.6(请下好第三方库requests) 实现的功能:输入关键字,下载240张关键字有关的百度图片到本地的d:\百度图片\关键字\文件夹中. 百度图片的加载是ajax异步形式的,除了前面的一部分图片,后面靠下拉加载的图片都是异步从服务器端请求得到的.这些异步加载的图片的信息可以在一个个acjson的百度图片接口中,可以在开发者工具中xhr下找到这些文件. 接下来上代码: import requestsimport reimport o

爬虫试手——百度贴吧爬虫

自学python有一段时间了,做过的东西还不多,最近开始研究爬虫,想自己写一个爬百度贴吧的帖子内容,然后对帖子做分词和词频统计,看看这个吧热议的关键词都有哪些.百度了好多资料和视频,学到了不少东西,但也生出了一些问题: 1.http请求用python自带的urllib,也可以用requests,哪个更好用? 2.html解析可以用正则表达式,也可以用xpath,哪个效率更高? 根据网上资料的说法,requests相对更好用,因为很多功能已经封装好了,性能上与urllib也没什么区别,而正则表达式