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进程类subprocess的一些操作方法例子
Nov 22 Python
python实现模拟按键,自动翻页看u17漫画
Mar 17 Python
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
简单介绍Python中利用生成器实现的并发编程
May 04 Python
PyQt5每天必学之单行文本框
Apr 19 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
django开发post接口简单案例,获取参数值的方法
Dec 11 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
python flask框架实现重定向功能示例
Jul 02 Python
使用Python实现跳一跳自动跳跃功能
Jul 10 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
django orm模块中的 is_delete用法
May 20 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中的日期处理方法集锦
2007/01/02 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
2011/04/17 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
jQuery事件详解
2017/02/23 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
Vue-router 报错NavigationDuplicated的解决方法
2020/03/31 Javascript
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
python实现俄罗斯方块
2018/06/26 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
Django 再谈一谈json序列化
2020/03/16 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
python re.match()用法相关示例
2021/01/27 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
阳光体育:Sunny Sports(购买露营和远足设备)
2018/08/07 全球购物
《池塘边的叫声》教学反思
2014/04/12 职场文书
教师演讲稿大全
2014/05/16 职场文书
机关保密承诺书
2014/06/03 职场文书
2014年妇联工作总结
2014/11/21 职场文书