【爬虫】BeautifulSoup之爬取百度贴吧的帖子
在网上看到爬百度贴吧的例子,仿照写了一个用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之爬取百度贴吧的帖子的更多相关文章
- 利用python的爬虫技术爬取百度贴吧的帖子
在爬取糗事百科的段子后,我又在知乎上找了一个爬取百度贴吧帖子的实例,为了巩固提升已掌握的爬虫知识,于是我打算自己也做一个. 实现目标:1,爬取楼主所发的帖子 2,显示所爬去的楼层以及帖子题目 3,将爬 ...
- Python爬虫实战之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...
- Python爬虫爬取百度贴吧的帖子
同样是参考网上教程,编写爬取贴吧帖子的内容,同时把爬取的帖子保存到本地文档: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urlli ...
- Python 爬虫练习: 爬取百度贴吧中的图片
背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...
- 芝麻HTTP:Python爬虫实战之爬取百度贴吧帖子
本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件 1.URL格式的确定 首先,我们先观察一下百度贴吧的任意一个帖子. 比如:http:// ...
- 【python爬虫】 之 爬取百度首页
刚开始学习爬虫,照着教程手打了一遍,还是蛮有成就感的.使用版本:python2.7 注意:python2的默认编码是ASCII编码而python3默认编码是utf-8 import urllib2 u ...
- 百度图片爬虫-python版-如何爬取百度图片?
上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...
- 写一个python 爬虫爬取百度电影并存入mysql中
目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...
- Python开发简单爬虫(二)---爬取百度百科页面数据
一.开发爬虫的步骤 1.确定目标抓取策略: 打开目标页面,通过右键审查元素确定网页的url格式.数据格式.和网页编码形式. ①先看url的格式, F12观察一下链接的形式;② 再看目标文本信息的标签格 ...
随机推荐
- ubuntu SSH 连接、远程上传下载文件
安装 SSH(Secure Shell) 服务以提供远程管理服务 sudo apt-get install ssh SSH 远程登入 Ubuntu 机 ssh username@192.168.0.1 ...
- js常见报错之Unexpected token in JSON at position
源头 出现这个报错提示,根本原因只有一个--json解析异常,所以请大家直接去关注自己json的返回数据注意检查其返回内容和内容的格式是否正确,至于本文血案的导火索是因为json注释滴问题. 事发 ...
- ios10新特性-UserNotification
引言:iOS的通知分本地通知和远程通知,iOS10之前采用的是UILocationNotification类,远程通知有苹果服务器进行转发,本地通知和远程通知其回调的处理都是通过AppDelegate ...
- Js中强大的Promise异步机制
少年别激动 我的这份随笔里面只涉及promise概念 如果想深入了解Promise的用法 可以去阮老师es6入门里面详读 奉上链接 http://es6.ruanyifeng.com/#docs/pr ...
- 【tomcat ecplise】新下载一个tomcat,无法成功启动,或者启动了无法访问localhost:8080页面/ecplise无法添加新的tomcat/ecplise启动tomcat启动不起来
今天转头使用ecplise,于是新下载一个tomcat7来作为服务器使用 但是问题来了: [问题1:全新的tomcat启动即消耗了不可思议的时间,并且启动了之前其他tomcat中的很多项目] [注意: ...
- ScrollView控件实现屏幕滚动
滚动视图是指当拥有很多内容,屏幕显示不完全时,需要通过滚动来显示完整的视图 ScrollView的种类: (1)水平滚动视图:HorizontalScrollView (2)垂直滚动视图:Scroll ...
- 什么是shell
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...
- iOS 用xib自定义view控件 debug笔记
1.在view不是很复杂的情况下,如果多次检查后依旧出现coding-compliant这种情况,干脆彻底删除这个xib重新新建一个xib来做一遍.(至今未明真相) 2.初始化xib中的view的大致 ...
- 诡异的C语言实参求值顺序
学了这么久的C语言,竟然第一次碰到这么诡异的实参求值顺序问题,大跌眼镜.果然阅读面太少了! #include<iostream> void foo(int a, int b, int c) ...
- Bulk_Collect 调用方式集锦
事先申明,本文所有示例都皆源于<Expert PL SQL Practices>这本电子书的第六章.小陈觉得在学习PLSQL的过程中,将来或许会用到,在此笔记一番. 正文如下: 首先准备基 ...