Python爬虫之简单的爬取百度贴吧数据
首先要使用的第类库有 urllib下的request 以及urllib下的parse 以及 time包 random包
之后我们定义一个名叫BaiduSpider类用来爬取信息
属性有 url:用来爬取的网址 headers:请求头
class BaiduSpider(object):
def __init__(self):
self.url = 'http://tieba.baidu.com/f?kw={}&pn={}'
self.headers = {'User-Agent':'Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'}
之后我们定义三个方法 不涉及清洗数据
获取页面
#获取页面
def get_page(self,url):
#定义请求对象
req = request.Request(url=url,headers=self.headers)
#发起请求
res = request.urlopen(req)
#获取相应对象
html = res.read().decode('utf-8', 'ignore')
return html
保存数据
#保存数据
def write_page(self,filename,html):
#将数据保存到本地
with open(filename,'w',encoding='utf-8') as f:
f.write(html)
主函数
#主函数
def main(self):
name = input('请输入贴吧名:>>>>')
start = int(input('请输入起始页'))
end = int(input('请输入终止页'))
for page in range(start,end+1):
#拼接URL地址 'http://tieba.baidu.com/f?kw{}&pn={}'
#进行编码 将中文字符编码为url地址编码
kw = parse.quote(name)
#获取当前页数
pn = (page-1)*50
#进行url地址的拼接
url = self.url.format(kw,pn)
#获取相应
html = self.get_page(url)
filename = '{}-第{}页.html'.format(name,page)
self.write_page(filename,html)
#提示
print('第{}页爬取成功'.format(page))
#控制爬取速度
time.sleep(random.randint(1,3))
最后 所有的代码展示如下
#导入模块
from urllib import request,parse
import time
import random class BaiduSpider(object):
def __init__(self):
self.url = 'http://tieba.baidu.com/f?kw={}&pn={}'
self.headers = {'User-Agent':'Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'} #获取页面
def get_page(self,url):
#定义请求对象
req = request.Request(url=url,headers=self.headers)
#发起请求
res = request.urlopen(req)
#获取相应对象
html = res.read().decode('utf-8', 'ignore')
return html #解析数据
def parse_page(self):
pass #保存数据
def write_page(self,filename,html):
#将数据保存到本地
with open(filename,'w',encoding='utf-8') as f:
f.write(html) #主函数
def main(self):
name = input('请输入贴吧名:>>>>')
start = int(input('请输入起始页'))
end = int(input('请输入终止页'))
for page in range(start,end+1):
#拼接URL地址 'http://tieba.baidu.com/f?kw{}&pn={}'
#进行编码 将中文字符编码为url地址编码
kw = parse.quote(name)
#获取当前页数
pn = (page-1)*50
#进行url地址的拼接
url = self.url.format(kw,pn)
#获取相应
html = self.get_page(url)
filename = '{}-第{}页.html'.format(name,page)
self.write_page(filename,html)
#提示
print('第{}页爬取成功'.format(page))
#控制爬取速度
time.sleep(random.randint(1,3)) if __name__ == '__main__':
spider = BaiduSpider()
spider.main()
一个非常非常简单的爬虫就完成了 让我们看一下运行效果截图:


html文件打开后 与我们正常打开的网页并没有太大的差别
Python爬虫之简单的爬取百度贴吧数据的更多相关文章
- Python爬虫实战二之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...
- 转 Python爬虫实战二之爬取百度贴吧帖子
静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...
- Python爬虫:为什么你爬取不到网页数据
前言: 之前小编写了一篇关于爬虫为什么爬取不到数据文章(文章链接为:Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章), 但是当时小编也是胡乱编写的,其实里面有很多问题的,现在小编重新发 ...
- Python开发简单爬虫(二)---爬取百度百科页面数据
一.开发爬虫的步骤 1.确定目标抓取策略: 打开目标页面,通过右键审查元素确定网页的url格式.数据格式.和网页编码形式. ①先看url的格式, F12观察一下链接的形式;② 再看目标文本信息的标签格 ...
- Python爬虫:通过关键字爬取百度图片
使用工具:Python2.7 点我下载 scrapy框架 sublime text3 一.搭建python(Windows版本) 1.安装python2.7 ---然后在cmd当中输入python,界 ...
- Python 基础语法+简单地爬取百度贴吧内容
Python笔记 1.Python3和Pycharm2018的安装 2.Python3基础语法 2.1.1.数据类型 2.1.1.1.数据类型:数字(整数和浮点数) 整数:int类型 浮点数:floa ...
- Python爬虫入门教程 42-100 爬取儿歌多多APP数据-手机APP爬虫部分
1. 儿歌多多APP简单分析 今天是手机APP数据爬取的第一篇案例博客,我找到了一个儿歌多多APP,没有加固,没有加壳,没有加密参数,对新手来说,比较友好,咱就拿它练练手,熟悉一下Fiddler和夜神 ...
- 【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接
[学习笔记]Python 3.6模拟输入并爬取百度前10页密切相关链接 问题描述 通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接. me ...
- python爬虫:了解JS加密爬取网易云音乐
python爬虫:了解JS加密爬取网易云音乐 前言 大家好,我是"持之以恒_liu",之所以起这个名字,就是希望我自己无论做什么事,只要一开始选择了,那么就要坚持到底,不管结果如何 ...
随机推荐
- JDK_API剖析之java.io包
Java的核心库java.io提供了全面的IO接口.包括:文件读写.标准设备输出等.Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入. 一.接口 1.Closea ...
- kaliXSSbeef的使用
Kali中Beef的安装和使用: 先打开终端输入 apt-get install beef-xss 然后切换到beef的安装目录 cd /usr/share/beef-xss 然后启动beef ./b ...
- web 多屏互动显示方案
1 基于 local storage 实现的信息传递 相关插件 lsbridge.js https://github.com/krasimir/l... 且项目中有非常简单易懂的示例你需要了解的一些关 ...
- Windows下如何安装Redis
Redis可以从下面的github上面下载,当前的下载版本为3.2.100版本 https://github.com/MicrosoftArchive/redis/releases 这边都是64位的链 ...
- MySQL中的exist与not exists
准备数据 我们先介绍下使用的3个数据表: student数据表: course数据表: sc数据表: EXISTS EXISTS代表存在量词∃.带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真 ...
- SQL 表 数据备份
insert into SMTTemporarySave select * from [MSV0CIMDB].[PICS_20170706].dbo.SMTTemporarySave
- React组件库集锦及学习视频
[转载]https://www.rails365.net/articles/react-zui-hao-de-ui-zu-jian-ku-ji-jin 这里有一篇讨论,说了哪个才是 React 最好的 ...
- Typography 字体
Typography 字体 我们对字体进行统一规范,力求在各个操作系统下都有最佳展示效果. ¶中文字体 和畅惠风 PingFang SC 和畅惠风 Hiragino Sans GB 和畅惠风 Micr ...
- CSS 解决 a标签去掉下划线 text-decoration: none无效 的解决方案
经过查阅,如果想要去掉a标签的默认效果,就要用text-decoration: none;,但是经过试验发现并不好用,可能是因为你用a标签里的class或id定义的CSS样式,就像这样: <di ...
- rocketMQ broker 分发并处理请求
使用 netty 监听端口 // org.apache.rocketmq.remoting.netty.NettyRemotingServer#start ServerBootstrap childH ...