Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法


Posted in Python onApril 22, 2018

分享给大家供大家参考,具体如下:Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法。分享给大家供大家参考,具体如下:

首先我们创建一个python文件, tieba.py,我们要完成的是,输入指定百度贴吧名字与指定页面范围之后爬取页面html代码,我们首先观察贴吧url的规律,比如:

百度贴吧LOL吧第一页:http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=0

第二页: http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=50

第三页: http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=100

发现规律了吧,贴吧中每个页面不同之处,就是url最后的pn的值,其余的都是一样的,我们可以抓住这个规律(kw表示贴吧名,采用url编码)。

清楚了url规则,我们便可以利用urllib进行批量式数据爬取,代码如下:

# -*- coding:utf-8 -*-
from urllib import request as urllib2
from urllib import parse
import random
def loadPage(url, page):
  '''
  根据url获取服务器响应文件
  url:需要爬取的url
  '''
  print('---------正在下载页面%d-------' % page)
  ua_list = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 6.1; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
    "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
  ]
  header = random.choice(ua_list)
  request = urllib2.Request(url)
  request.add_header('User-Agent', header)
  response = urllib2.urlopen(request)
  html = response.read()
  return html
def write(html, page):
  '''
  将html文件写入本地
  :param html: 服务器响应文件内容
  :return:
  '''
  data = html
  file_name = 'tieba{}.txt'.format(page)
  print('---------正在保存文件%s-------'%file_name)
  # 运用with open as语句使代码更加简洁 避免写异常处理和文件关闭语句
  with open(file_name,'w',encoding='utf-8') as file:
    file.write(data.decode())
  print('---------success!---------')
def tiebaSpider(url, kw, begin, end):
  '''
  爬取贴吧信息
  '''
  words = {
    'kw':kw
  }
  kw = parse.urlencode(words)
  url = url % (kw)
  for page in range(begin, end + 1):
    pn = ((page-1)*50)
    ful_url = url + str(pn)
    html = loadPage(url, page)
    write(html, page)
if __name__ == '__main__':
  kw = input('请输入爬取贴吧名:')
  beginPage = int(input('请输入起始页:'))
  endPage = int(input('请输入结束页:'))
  url = r'http://tieba.baidu.com/f?%s&pn='
  tiebaSpider(url, kw, beginPage, endPage)

控制台结果如下:

请输入爬取贴吧名:河南
请输入起始页:1
请输入结束页:3
---------正在下载页面1-------
---------正在保存文件tieba1.txt-------
---------success!---------
---------正在下载页面2-------
---------正在保存文件tieba2.txt-------
---------success!---------
---------正在下载页面3-------
---------正在保存文件tieba3.txt-------
---------success!---------
Process finished with exit code 0

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python批量同步web服务器代码核心程序
Sep 01 Python
使用Python操作MySQL的一些基本方法
Aug 16 Python
python getopt详解及简单实例
Dec 30 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
Python实现查找最小的k个数示例【两种解法】
Jan 08 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
python logging添加filter教程
Dec 24 Python
pandas 对group进行聚合的例子
Dec 27 Python
virtualenv介绍及简明教程
Jun 23 Python
python 两种方法删除空文件夹
Sep 29 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 #Python
Python贪心算法实例小结
Apr 22 #Python
python 判断网络连通的实现方法
Apr 22 #Python
Python3之读取连接过的网络并定位的方法
Apr 22 #Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 #Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 #Python
selenium+python实现自动登录脚本
Apr 22 #Python
You might like
ADODB类使用
2006/11/25 PHP
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
php构造函数与析构函数
2016/04/23 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
js实现星星打分效果
2020/07/05 Javascript
Vue作用域插槽实现方法及作用详解
2020/07/08 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
python实现按行切分文本文件的方法
2016/04/18 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
Weblogic和WebSphere不同特点
2012/05/09 面试题
淘宝活动策划方案
2014/02/06 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
交流会主持词
2015/07/02 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL