这次主要学习了替换各种标签,规范格式的方法。依然参考博主崔庆才的博客

1.获取url

某一帖子:https://tieba.baidu.com/p/3138733512?see_lz=1&pn=1

其中https://tieba.baidu.com/p/3138733512?为基础部分,剩余的为参数部分。

   http://  代表资源传输使用http协议

   tieba.baidu.com 是百度的二级域名,指向百度贴吧的服务器。
   /p/3138733512 是服务器某个资源,即这个帖子的地址定位符
   see_lz和pn是该URL的两个参数,分别代表了只看楼主和帖子页码,等于1表示该条件为真

    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
 
2.获取标题

因为标题由<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爬虫-爬取百度贴吧帖子的更多相关文章

  1. Python爬虫 - 爬取百度html代码前200行

    Python爬虫 - 爬取百度html代码前200行 - 改进版,  增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...

  2. python爬虫-爬取百度图片

    python爬虫-爬取百度图片(转) #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:16# 文件 :spider ...

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

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

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

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

  5. Python爬虫爬取贴吧的帖子内容

    最近在看一个大神的博客,从他那里学会了很多关于python爬虫的知识,其实python如果想用在实际应用中,你需要了解许多,比如正则表达式.引入库.过滤字段等等,下面不多说,我下面的程序是爬取Ubun ...

  6. python爬虫—爬取百度百科数据

    爬虫框架:开发平台 centos6.7 根据慕课网爬虫教程编写代码 片区百度百科url,标题,内容 分为4个模块:html_downloader.py 下载器 html_outputer.py 爬取数 ...

  7. Python爬虫爬取百度贴吧的图片

    根据输入的贴吧地址,爬取想要该贴吧的图片,保存到本地文件夹,仅供参考: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urllib2i ...

  8. Python爬虫爬取百度翻译之数据提取方法json

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统 说明:本例为实现输入中文翻译为英文的小程序,适合Python爬虫的初学者一起学习,感兴趣的可以做英文翻译为中文的 ...

  9. python --爬虫--爬取百度翻译

    import requestsimport json class baidufanyi: def __init__(self, trans_str): self.lang_detect_url = ' ...

随机推荐

  1. 自学Python2.8-条件(if、if...else)

    自学Python之路 自学Python2.8-条件(if.if...else) 1.if 判断语句 if语句是用来进行判断的,其使用格式如下:  if 要判断的条件: 条件成立时,要做的事情 当“判断 ...

  2. Python文件和异常

    程序和运行时数据是在内存中驻留的,涉及到数据交换的地方,通常是磁盘.网络等,因此需要IO接口. IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单 ...

  3. max,min,Zip函数(十一)

    zip函数,拉链,传两个有序的参数,将他们一一对应为元祖形式 max,min比较默认比较一个元素,处理的是可迭代对象,相当于for循环取出每个元素进行比较,注意:不同类型之间不可比较 #!/usr/b ...

  4. babel的使用及babel与gulp结合工作流

    Babel 通过语法转换器支持最新版本的 JavaScript . 它有非常多的插件,这些插件能够允许我们立刻使用新语法,无需等待浏览器支持. 那我们怎么使用babel呢? 首先我们来了解babel基 ...

  5. JSONObject的toBean 和 fromObject

    public static void main(String[] args) { Map map=new HashMap(); map.put("我","妹") ...

  6. CodeForces912E 折半+二分+双指针

    http://codeforces.com/problemset/problem/912/E 题意·n个质数,问因子中只包含这其中几个质数的第k大的数是多少 最显然的想法是暴力搜预处理出所有的小于1e ...

  7. raise TemplateDoesNotExist

    raise TemplateDoesNotExist(template_name, chain=chain)django.template.exceptions.TemplateDoesNotExis ...

  8. WebLogic 中的基本概念【转】

    完全引用自: WebLogic 中的基本概念 WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训,为了便于自己记忆,培训后,整理梳理了一些WebLogic的资料,会陆续的发出来, ...

  9. java自带BASE64工具进行图片和字符串转换【转】

    java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  10. 运用Zabbix实现内网服务器状态及局域网状况监控(4) —— Zabbix客户端安装

    1.  创建用户 [root@zabbix ~]# groupadd zabbix [root@zabbix ~]# useradd -g zabbix zabbix 2. 安装zabbix_3.2 ...