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 tkinter模块中类继承的三种方式分析
Aug 08 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
Python模拟脉冲星伪信号频率实例代码
Jan 03 Python
使用python获取电脑的磁盘信息方法
Nov 01 Python
python 消除 futureWarning问题的解决
Dec 25 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
Django操作session 的方法
Mar 09 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 Python
python模拟实现分发扑克牌
Apr 22 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
Python内置函数locals和globals对比
Apr 28 Python
浅析关于Keras的安装(pycharm)和初步理解
Oct 23 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读取纯真ip数据库使用示例
2014/01/26 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
php内嵌函数用法实例
2015/03/20 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
python 拼接文件路径的方法
2018/10/23 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
Python中Selenium库使用教程详解
2020/07/23 Python
如何完美的建立一个python项目
2020/10/09 Python
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
学生就业推荐信
2013/11/13 职场文书
代办委托书怎样写
2014/04/08 职场文书
环保建议书300字
2014/05/14 职场文书
廉洁校园实施方案
2014/05/25 职场文书
大学生求职信
2014/06/17 职场文书
2014年督导工作总结
2014/11/19 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书