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判断端口是否打开的实现代码
Feb 10 Python
举例介绍Python中的25个隐藏特性
Mar 30 Python
使用Python操作MySQL的一些基本方法
Aug 16 Python
Python实现采用进度条实时显示处理进度的方法
Dec 19 Python
Python模块文件结构代码详解
Feb 03 Python
jupyter notebook 增加kernel教程
Apr 10 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
Apr 16 Python
python实现四人制扑克牌游戏
Apr 22 Python
Pytorch 使用CNN图像分类的实现
Jun 16 Python
python如何删除文件、目录
Jun 23 Python
基于Python的自媒体小助手---登录页面的实现代码
Jun 29 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
Feb 19 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实现下载功能的代码
2012/09/29 PHP
php定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
prototype class详解
2006/09/07 Javascript
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
python中引用与复制用法实例分析
2015/06/04 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
python实现简易淘宝购物
2019/11/22 Python
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
中国高端家电购物商城:顺电
2018/03/04 全球购物
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
汉语专业应届生求职信
2013/10/01 职场文书
员工评语大全
2014/01/19 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
python运算符之与用户交互
2022/04/13 Python