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 正则表达式操作指南
May 04 Python
python实现删除文件与目录的方法
Nov 10 Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
python数据结构之列表和元组的详解
Sep 23 Python
python实现公司年会抽奖程序
Jan 22 Python
python实现QQ邮箱/163邮箱的邮件发送
Jan 22 Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
python装饰器原理与用法深入详解
Dec 19 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
python在CMD界面读取excel所有数据的示例
Sep 28 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
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
php数组去除空值函数分享
2015/02/02 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
强制设为首页代码
2006/06/19 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
如何制作幻灯片(代码分享)
2017/01/06 Javascript
Vue computed计算属性的使用方法
2017/07/14 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
python实现在pickling的时候压缩的方法
2014/09/25 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
python求质数列表的例子
2019/11/24 Python
初学者学习Python好还是Java好
2020/05/26 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
求职简历中个人的自我评价
2013/12/01 职场文书
教师对学生的评语
2014/04/28 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
2016大学军训心得体会
2016/01/11 职场文书
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android
JavaScript设计模式之原型模式详情
2022/06/21 Javascript