在网上看到爬百度贴吧的例子,仿照写了一个用BeautifulSoup实现的,直接上代码吧

#coding:gbk
import urllib2
from bs4 import BeautifulSoup
import re
import os class TiebatoTxt:
def __init__(self, url, seeLZ):
#传入url
self.url = url
#是否只看楼主
self.seeLZ = '?see_lz='+str(seeLZ)
self.floor = 1
self.File = None
self.defaultTitle = "百度贴吧" #获得每一页的BeautifulSoup对象
def get_body(self, pageNum):
url = self.url + self.seeLZ + '&pn=' + str(pageNum)
req = urllib2.Request(url)
try :
html = urllib2.urlopen(req)
except (urllib2.HTTPError, urllib2.URLError) as e:
print u"获取帖子链接错误"
return None
try:
bsObj = BeautifulSoup(html, "html.parser")
except AttributeError as e:
print u"获得BeautifulSoup对象错误"
return None
return bsObj #获得帖子标题
def find_title(self, page):
name = page.find("head").find("title").get_text()
if name:
return name
else:
return None #获取帖子共有多少页
def get_pagenum(self, page):
pageinfoList= page.findAll("li", {"class":"l_reply_num"})
if pageinfoList is not None:
for info in pageinfoList:
span = info.findAll("span")
if span is not None:
return span[1].get_text().encode("gbk")
else:
print "pageinfoList is none" #获得每一楼层的内容
def get_content(self, page):
div = page.findAll("div", {"id":re.compile("post_content_.*?")})
contents = []
for item in div:
floorLine = "\n\n" + str(self.floor) + u"------------------------------------------------------\n\n"
contents.append(floorLine)
con = item.getText("\n", strip=True).encode("gbk", "ignore")#忽略一些特殊字符
self.floor = self.floor + 1
txturl = None
txturl = item.findAll("a")
#有些词带链接,去掉链接
if txturl:
for i in txturl:
word = i.getText(strip=True).encode("gbk", "ignore")
con = con.replace(("\n%s\n"%word), word) contents.append(con)
return contents
#print item.get_text(strip=True) def setFileTitle(self,title):
#如果标题不是为None,即成功获取到标题
if title is not None:
title = title.replace('/', '')
self.File = open(os.path.join(os.getcwd(), (title + ".txt")),"w+")
else:
self.File = open(os.path.join(os.getcwd(), (self.defaultTitle + ".txt")),"w+") def writetotxt(self,contents):
#向文件写入每一楼的信息
for item in contents:
self.File.write(item) def start(self):
indexPage = self.get_body(1)
pageNum = self.get_pagenum(indexPage)
title = self.find_title(indexPage)
self.setFileTitle(title)
if pageNum == None:
print "URL已失效,请重试"
return
try:
print "该帖子共有" + str(pageNum) + "页"
for i in range(1,int(pageNum)+1):
print "正在写入第" + str(i) + "页数据"
page = self.get_body(i)
contents = self.get_content(page)
self.writetotxt(contents)
#出现写入异常
except IOError,e:
print "写入异常,原因" + e.message
finally:
print "写入任务完成" #
if __name__ == '__main__':
print u"请输入帖子代号"
baseURL = 'http://tieba.baidu.com/p/' + str(raw_input(u'http://tieba.baidu.com/p/'))
seeLZ = raw_input(u"是否只获取楼主发言,是输入1,否输入0:")
t = TiebatoTxt(baseURL, seeLZ)
b = t.start()

【爬虫】BeautifulSoup之爬取百度贴吧的帖子的更多相关文章

  1. 利用python的爬虫技术爬取百度贴吧的帖子

    在爬取糗事百科的段子后,我又在知乎上找了一个爬取百度贴吧帖子的实例,为了巩固提升已掌握的爬虫知识,于是我打算自己也做一个. 实现目标:1,爬取楼主所发的帖子 2,显示所爬去的楼层以及帖子题目 3,将爬 ...

  2. Python爬虫实战之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...

  3. Python爬虫爬取百度贴吧的帖子

    同样是参考网上教程,编写爬取贴吧帖子的内容,同时把爬取的帖子保存到本地文档: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urlli ...

  4. Python 爬虫练习: 爬取百度贴吧中的图片

    背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...

  5. 芝麻HTTP:Python爬虫实战之爬取百度贴吧帖子

    本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件 1.URL格式的确定 首先,我们先观察一下百度贴吧的任意一个帖子. 比如:http:// ...

  6. 【python爬虫】 之 爬取百度首页

    刚开始学习爬虫,照着教程手打了一遍,还是蛮有成就感的.使用版本:python2.7 注意:python2的默认编码是ASCII编码而python3默认编码是utf-8 import urllib2 u ...

  7. 百度图片爬虫-python版-如何爬取百度图片?

    上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...

  8. 写一个python 爬虫爬取百度电影并存入mysql中

    目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...

  9. Python开发简单爬虫(二)---爬取百度百科页面数据

    一.开发爬虫的步骤 1.确定目标抓取策略: 打开目标页面,通过右键审查元素确定网页的url格式.数据格式.和网页编码形式. ①先看url的格式, F12观察一下链接的形式;② 再看目标文本信息的标签格 ...

随机推荐

  1. 解决NSData转NSString返回nil的问题

    // 字符串转Data NSString *str =@"jesfds"; NSData *data =[str dataUsingEncoding:NSUTF8StringEnc ...

  2. VS更改编辑窗背景

    打开Visual Studio  工具→扩展和更新→联机  在搜索框里输入“background”后,搜索结果有很多插件可以更改 Visual Studio 的背景,选择其中的一项,可以在右边进行预览 ...

  3. PHP上传文件示例

    虽然大多数人认为Web只包含网页,但HTTP协议实际上可以传输任何文件,如office文档.PDF.可执行文件.AVI.压缩文件及各种其他文件类型.虽然FTP在历史上一直是向服务器上传文件的标准方式, ...

  4. haproxy 实现多域名证书https

    [root@ha02 keys]# openssl genrsa - Generating RSA bit long modulus ....+++ ......................... ...

  5. HTTP协议GET和POST请求的区别

    浏览器中输入网址访问资源一般都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交.Http协议定义了与服务器交互的不同方法,最基本的方法有4种, ...

  6. 简单快捷好用的vim配置和终端配置推荐

    vim 配置实用spf13-vim,安装方便简单快捷,极力推荐. 另外oh-my-zsh 终端配置很好,与之搭配使用效果更佳. 安装都很简单,一个脚本搞定, 都是在gitHub上开源的,自行搜索,这里 ...

  7. 如何让win10实现关机确认-暂没确认

    为了实现关机时有提示确认,防止不小心触碰后不提示就关机了.本人安装有360软件小助手,发生过此事多次. 1.网上找到 http://zhidao.baidu.com/link?url=dYB0fl2S ...

  8. ARM大学计划全球经理到访华清远见,深入交流教育合作

    来源:华清远见嵌入式学院 10月20日,ARM大学计划全球经理Khaled Benkrid,高级内容主编洪川博士在ARM大学计划亚太经理陈炜博士的陪同下到访华清远见,就最新嵌入式技术.ARM处理器在教 ...

  9. Redis安装部署

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据 可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(dif ...

  10. ImageLoader

    配置ImageLoader 一般我们在使用ImageLoader的时候,需要在应用程序的入口进行它的一个配置,这个配置一般写到Application里边 * public void initImage ...