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服务器拒绝服务攻击代码
Jan 16 Python
python中字符串类型json操作的注意事项
May 02 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
python矩阵的转置和逆转实例
Dec 12 Python
Python math库 ln(x)运算的实现及原理
Jul 17 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
详解python中eval函数的作用
Oct 22 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
Scrapy框架实现的登录网站操作示例
Feb 06 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
Apr 30 Python
python中get和post有什么区别
Jun 19 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 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新手上路(十)
2006/10/09 PHP
PHP操作数组相关函数
2011/02/03 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
2021/01/07 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
linux面试题参考答案(1)
2016/01/22 面试题
应征英语教师求职信
2013/11/27 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
法人授权委托书
2014/09/16 职场文书
化验员岗位职责
2015/02/14 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
sql通过日期判断年龄函数的示例代码
2021/07/16 SQL Server
 Python 中 logging 模块使用详情
2022/03/03 Python
python单向链表实例详解
2022/05/25 Python