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 getopt 参数处理小示例
Jun 09 Python
python网络编程学习笔记(二):socket建立网络客户端
Jun 09 Python
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
python机器学习之贝叶斯分类
Mar 26 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
Python Pandas 箱线图的实现
Jul 23 Python
解决Python二维数组赋值问题
Nov 28 Python
python Opencv计算图像相似度过程解析
Dec 03 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
Python常用外部指令执行代码实例
Nov 05 Python
python 逐步回归算法
Apr 06 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 zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
php一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
php生成无限栏目树
2017/03/16 PHP
PHP培训要多少钱
2017/06/06 PHP
php图像验证码生成代码
2017/06/08 PHP
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
《愚公移山》教学反思
2014/02/20 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
办公室管理规章制度
2015/08/04 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers