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 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
在Python中使用next()方法操作文件的教程
May 24 Python
在Python的Django框架中simple-todo工具的简单使用
May 30 Python
使用Python的PIL模块来进行图片对比
Feb 18 Python
python文件操作相关知识点总结整理
Feb 22 Python
Python实现的读写json文件功能示例
Jun 05 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
Django restframework 框架认证、权限、限流用法示例
Dec 21 Python
200行python代码实现贪吃蛇游戏
Apr 24 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 Python
Python包argparse模块常用方法
Jun 04 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新手用的Insert和Update语句构造类
2012/03/31 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
django模板语法学习之include示例详解
2017/12/17 Python
学生信息管理系统python版
2018/10/17 Python
python获取本机所有IP地址的方法
2018/12/26 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
为什么称python为胶水语言
2020/06/16 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
2014年乡镇卫生院工作总结
2014/11/24 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
2015年化验室工作总结
2015/04/23 职场文书
学生病假条范文
2015/08/17 职场文书