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 相关文章推荐
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
Python实现的计数排序算法示例
Nov 29 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
基于pip install django失败时的解决方法
Jun 12 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
Python创建数字列表的示例
Nov 28 Python
Python面向对象原理与基础语法详解
Jan 02 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 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+js实现异步图片上传实例分享
2014/06/02 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
js身份证验证超强脚本
2008/10/26 Javascript
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
jQuery之浮动窗口实现代码(两种方法)
2010/09/08 Javascript
javascript测试题练习代码
2012/10/10 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
JavaScript实现简易计算器小功能
2020/10/22 Javascript
python自带的http模块详解
2016/11/06 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
后勤人员自我鉴定
2013/10/20 职场文书
日语专业个人的求职信
2013/12/03 职场文书
员工工作表现评语
2014/04/26 职场文书
工业设计专业自荐书
2014/06/05 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
门面租赁合同范文
2019/08/06 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python