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基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
python executemany的使用及注意事项
Mar 13 Python
python中安装模块包版本冲突问题的解决
May 02 Python
python实现俄罗斯方块游戏
Mar 25 Python
pycharm重命名文件的方法步骤
Jul 29 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
Django Serializer HiddenField隐藏字段实例
Mar 31 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 Python
Python jieba库分词模式实例用法
Jan 13 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 得到根目录的 __FILE__ 常量
2008/07/23 PHP
基于pear auth实现登录验证
2010/02/26 PHP
php实现的日历程序
2015/06/18 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
javascript 有用的脚本函数
2009/05/07 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
Python Tkinter GUI编程入门介绍
2015/03/10 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
python实现括号匹配的思路详解
2018/08/23 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
python用Configobj模块读取配置文件
2020/09/26 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
经典c++面试题四
2015/05/14 面试题
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
企业务虚会发言材料
2014/10/20 职场文书
2014年派出所工作总结
2014/11/21 职场文书
大班上学期个人总结
2015/02/13 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript