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结合jieba和wordcloud实现词云效果
Sep 05 Python
python中Switch/Case实现的示例代码
Nov 09 Python
目前最全的python的就业方向
Jun 05 Python
Python爬虫实现简单的爬取有道翻译功能示例
Jul 13 Python
Python中垃圾回收和del语句详解
Nov 15 Python
Django实现学员管理系统
Feb 26 Python
python-tkinter之按钮的使用,开关方法
Jun 11 Python
pytorch 实现查看网络中的参数
Jan 06 Python
如何定义TensorFlow输入节点
Jan 23 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
python ssh 执行shell命令的示例
Sep 29 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 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
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
一个JavaScript变量声明的知识点
2013/10/28 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
Python导入txt数据到mysql的方法
2015/04/08 Python
Python字符串中查找子串小技巧
2015/04/10 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
python实现Virginia无密钥解密
2019/03/20 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python通过cython加密代码
2020/12/11 Python
python中pyqtgraph知识点总结
2021/01/26 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
会计顶岗实习心得
2014/01/25 职场文书
社区交通安全实施方案
2014/03/22 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
超市创业计划书
2014/09/15 职场文书
党员先进事迹材料
2014/12/19 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
2016年元旦寄语
2015/08/17 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang