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使用simplejson模块解析JSON的方法
Mar 24 Python
python类的继承实例详解
Mar 30 Python
MySQL适配器PyMySQL详解
Sep 20 Python
Python中int()函数的用法浅析
Oct 17 Python
Python实现的多进程和多线程功能示例
May 29 Python
解决pandas使用read_csv()读取文件遇到的问题
Jun 15 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
详解pandas安装若干异常及解决方案总结
Jan 10 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
Python使用正则实现计算字符串算式
Dec 29 Python
OpenCV Python实现拼图小游戏
Mar 23 Python
Python基本的内置数据类型及使用方法
Apr 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和MySQL保存和输出图片
2006/10/09 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
表格 隔行换色升级版
2009/11/07 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python爬取三国演义的实现方法
2016/09/12 Python
python生成随机图形验证码详解
2017/11/08 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
AOP的定义以及作用
2013/09/08 面试题
城建学院毕业生自荐信
2014/01/31 职场文书
2014年乡镇植树节活动方案
2014/02/28 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
心术观后感
2015/06/11 职场文书