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 = ' ...
随机推荐
- Python的二叉树实现
二叉树需要实现的功能及思路 找到最小值 没什么好说的就是二叉树最左下的顶点 找到最大值 没什么好说的就是二叉树最右下的顶点 插入 分情况,如果二叉树为空那么直接直接设置成根节点就好了.否则就逐层向下, ...
- 【Luogu4512】多项式除法(FFT)
题面 洛谷 题解 模板题... 我直接蒯我写的东西... 这个除法是带余除法,所以并不能直接求逆解决. 要求的就是给定两个多项式\(A(x),B(x)\),其项数为\(n,m\) 求解一个\(n-m\ ...
- Mysql插入、替换和无视
在现实的生产环境下,通常我们都会遇到这样的应用场景,需要我们更新数据.替换数据,若存在则不操作. insert into表示插入数据,数据库会检查主键,如果出现重复会报错: replace into表 ...
- 利用NEST2.0 在C#中操作Elasticsearch
前言:本文主要演示了如何通过c#来操作elasticsearch,分两个方面来演示: 索引数据 搜索数据 Note: 注意我索引数据和搜索数据是两个不同的例子,没有前后依赖关系 准备工作:需要在vis ...
- A1022. Digital Library
A Digital Library contains millions of books, stored according to their titles, authors, key words o ...
- Persits.Jpeg CMYK-to-RGB
这几天发现有几个用户上传的图片显示一个“红叉叉”,用迅雷下载一看,原来图片的“模式”是CMYK,这样的模式是不能在IE中正常显示的. 我想起能不能用程序自动转换呢? 在网上看到利用Persits.Jp ...
- scala生态圈概览
相信很多朋友都对 Scala 这个结合了面向对象编程范式和函数式编程范式的编程语言新宠有所耳闻吧?!那么一旦你所在的项目选择了 Scala 的技术栈,还有哪些工具,类库可以选择呢?各种类型的框架或者类 ...
- selenium_基本用法
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- ruby where用法
用法1 Subject.where(").order("name") 用法2 与find方法不同的是,where方法返回的结果不是数组而是ActiveRelation,这 ...
- CodeForces - 615D Multipliers(数论)
http://codeforces.com/problemset/problem/615/D 题意 给出m个质因子,组成一个数n.问n的约数的乘积是多少,输出mod 1e+7的结果. 分析 从输入我们 ...