Python爬虫-爬取百度贴吧帖子
这次主要学习了替换各种标签,规范格式的方法。依然参考博主崔庆才的博客。
1.获取url
某一帖子:https://tieba.baidu.com/p/3138733512?see_lz=1&pn=1
其中https://tieba.baidu.com/p/3138733512?为基础部分,剩余的为参数部分。
def getPage(self, pagenum):
try:
url = self.baseurl + self.seelz + '&pn=' + str(pagenum)
request = urllib2.Request(url)
response = urllib2.urlopen(request)
# print response.read()
# print url
return response.read().decode('utf-8')
except urllib2.URLError, e:
if hasattr(e, 'reason'):
print 'wrong !',e.reason
return None

因为标题由<h3 class="core_title_txt...</h3>包围,所以利用正则表达式很容易获取。
def getTitle(self):
page = self.getPage(1)
pattern = re.compile('<h3 class="core_title_tx.*?>(.*?)</h3>', re.S)
result = re.search(pattern, page)
if result:
print result.group(1)
else:
return None
3.获取帖子页数

如上图,利用正则表达式如下:
def getPageNum(self):
page = self.getPage(1)
pattern = re.compile('<li class="l_reply_num.*?</span>.*?<span.*?>(.*?)</span>', re.S)
result = re.search(pattern, page)
if result:
print result.group(1)
else:
return None
4.获取楼主正文内容

def getContent(self):
page = self.getPage(1)
pattern = re.compile('<div id="post_content_.*?>(.*?)</div>', re.S)
items = re.findall(pattern, page)
for item in items:
print self.tool.replace(item)
正文主要包括在<div id="post.....></div>,但是明显正文中穿插了各种换行符、链接、图片、段落符等。所以需要将这些符号删除或替换。
替换代码如下:
class Tool:
removeImg = re.compile('<img.*?>| {7}|') #去除图像和7位空格
removeAddr = re.compile('<a.*?>|</a>') #去除链接
replaceLine = re.compile('<tr>|<div>|<div></p>') #换行符替换成\n
replaceTD = re.compile('<td>') #制表符换位\t
replacePara = re.compile('<p.*?>') #段落符换位\n和两个空格
replaceBR = re.compile('<br>|<br><br>') #换行符或双换行符替换为\n
removeExtraTag = 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.replacePara, "\n ", x)
x = re.sub(self.replaceBR, '\n', x)
x = re.sub(self.removeExtraTag, "", x)
return x.strip()
5.整体代码及结果
# coding:utf-8 import urllib
import urllib2
import re class Tool:
removeImg = re.compile('<img.*?>| {7}|')
removeAddr = re.compile('<a.*?>|</a>')
replaceLine = re.compile('<tr>|<div>|<div></p>')
replaceTD = re.compile('<td>')
replacePara = re.compile('<p.*?>')
replaceBR = re.compile('<br>|<br><br>')
removeExtraTag = 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.replacePara, "\n ", x)
x = re.sub(self.replaceBR, '\n', x)
x = re.sub(self.removeExtraTag, "", x)
return x.strip() class tieba:
def __init__(self, baseurl, seelz):
self.baseurl = baseurl
self.seelz = '?see_lz=' + str(seelz)
self.tool = Tool() def getPage(self, pagenum):
try:
url = self.baseurl + self.seelz + '&pn=' + str(pagenum)
request = urllib2.Request(url)
response = urllib2.urlopen(request)
# print response.read()
# print url
return response.read().decode('utf-8')
except urllib2.URLError, e:
if hasattr(e, 'reason'):
print 'wrong !',e.reason
return None def getTitle(self):
page = self.getPage(1)
pattern = re.compile('<h3 class="core_title_tx.*?>(.*?)</h3>', re.S)
result = re.search(pattern, page)
if result:
print result.group(1)
else:
return None def getPageNum(self):
page = self.getPage(1)
pattern = re.compile('<li class="l_reply_num.*?</span>.*?<span.*?>(.*?)</span>', re.S)
result = re.search(pattern, page)
if result:
print result.group(1)
else:
return None def getContent(self):
page = self.getPage(1)
pattern = re.compile('<div id="post_content_.*?>(.*?)</div>', re.S)
items = re.findall(pattern, page)
for item in items:
print self.tool.replace(item) baseURL = 'https://tieba.baidu.com/p/3138733512'
bdtb = tieba(baseURL, 1)
# bdtb.getPage(1)
bdtb.getTitle()
bdtb.getPageNum()
bdtb.getContent()

Python爬虫-爬取百度贴吧帖子的更多相关文章
- Python爬虫 - 爬取百度html代码前200行
Python爬虫 - 爬取百度html代码前200行 - 改进版, 增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...
- python爬虫-爬取百度图片
python爬虫-爬取百度图片(转) #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:16# 文件 :spider ...
- 写一个python 爬虫爬取百度电影并存入mysql中
目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...
- Python爬虫爬取百度贴吧的帖子
同样是参考网上教程,编写爬取贴吧帖子的内容,同时把爬取的帖子保存到本地文档: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urlli ...
- Python爬虫爬取贴吧的帖子内容
最近在看一个大神的博客,从他那里学会了很多关于python爬虫的知识,其实python如果想用在实际应用中,你需要了解许多,比如正则表达式.引入库.过滤字段等等,下面不多说,我下面的程序是爬取Ubun ...
- python爬虫—爬取百度百科数据
爬虫框架:开发平台 centos6.7 根据慕课网爬虫教程编写代码 片区百度百科url,标题,内容 分为4个模块:html_downloader.py 下载器 html_outputer.py 爬取数 ...
- Python爬虫爬取百度贴吧的图片
根据输入的贴吧地址,爬取想要该贴吧的图片,保存到本地文件夹,仅供参考: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urllib2i ...
- Python爬虫爬取百度翻译之数据提取方法json
工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统 说明:本例为实现输入中文翻译为英文的小程序,适合Python爬虫的初学者一起学习,感兴趣的可以做英文翻译为中文的 ...
- python --爬虫--爬取百度翻译
import requestsimport json class baidufanyi: def __init__(self, trans_str): self.lang_detect_url = ' ...
随机推荐
- 自学Python2.8-条件(if、if...else)
自学Python之路 自学Python2.8-条件(if.if...else) 1.if 判断语句 if语句是用来进行判断的,其使用格式如下: if 要判断的条件: 条件成立时,要做的事情 当“判断 ...
- Python文件和异常
程序和运行时数据是在内存中驻留的,涉及到数据交换的地方,通常是磁盘.网络等,因此需要IO接口. IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单 ...
- max,min,Zip函数(十一)
zip函数,拉链,传两个有序的参数,将他们一一对应为元祖形式 max,min比较默认比较一个元素,处理的是可迭代对象,相当于for循环取出每个元素进行比较,注意:不同类型之间不可比较 #!/usr/b ...
- babel的使用及babel与gulp结合工作流
Babel 通过语法转换器支持最新版本的 JavaScript . 它有非常多的插件,这些插件能够允许我们立刻使用新语法,无需等待浏览器支持. 那我们怎么使用babel呢? 首先我们来了解babel基 ...
- JSONObject的toBean 和 fromObject
public static void main(String[] args) { Map map=new HashMap(); map.put("我","妹") ...
- CodeForces912E 折半+二分+双指针
http://codeforces.com/problemset/problem/912/E 题意·n个质数,问因子中只包含这其中几个质数的第k大的数是多少 最显然的想法是暴力搜预处理出所有的小于1e ...
- raise TemplateDoesNotExist
raise TemplateDoesNotExist(template_name, chain=chain)django.template.exceptions.TemplateDoesNotExis ...
- WebLogic 中的基本概念【转】
完全引用自: WebLogic 中的基本概念 WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训,为了便于自己记忆,培训后,整理梳理了一些WebLogic的资料,会陆续的发出来, ...
- java自带BASE64工具进行图片和字符串转换【转】
java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...
- 运用Zabbix实现内网服务器状态及局域网状况监控(4) —— Zabbix客户端安装
1. 创建用户 [root@zabbix ~]# groupadd zabbix [root@zabbix ~]# useradd -g zabbix zabbix 2. 安装zabbix_3.2 ...