Python爬虫实现网页信息抓取功能示例【URL与正则模块】


Posted in Python onMay 18, 2017

本文实例讲述了Python爬虫实现网页信息抓取功能。分享给大家供大家参考,具体如下:

首先实现关于网页解析、读取等操作我们要用到以下几个模块

import urllib
import urllib2
import re

我们可以尝试一下用readline方法读某个网站,比如说百度

def test():
  f=urllib.urlopen('http://www.baidu.com')
  while True:
   firstLine=f.readline()
   print firstLine

下面我们说一下如何实现网页信息的抓取,比如说百度贴吧

我们大概要做几件事情:

首先获取网页及其代码,这里我们要实现多页,即其网址会改变,我们传递一个页数

def getPage(self,pageNum):
     try:
        url=self.baseURL+self.seeLZ+'&pn='+str(pageNum)
        #创建request对象
        request=urllib2.Request(url)
        response=urllib2.urlopen(request)
        #print 'URL:'+url
        return response.read()
     except Exception,e:
        print e

之后我们要获取小说内容,这里咱们分为标题和正文。标题每页都有,所以我们获取一次就好了。

我们可以点击某网站,按f12查看他的标题标签是如何构造的,比如说百度贴吧是<title>…………

那我们就匹配reg=re.compile(r'<title>(.*?)。')来抓取这个信息

标题抓取完我们要开始抓去正文了,我们知道正文会有很多段,所以我们要循环的去抓取整个items,这里我们注意

对于文本的读写操作,一定要放在循环外。同时加入一些去除超链接、<br>等机制

最后,我们在主函数调用即可

完整代码:

# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')
#爬虫之网页信息抓取
#需要的函数方法:urllib,re,urllib2
import urllib
import urllib2
import re
#测试函数->读取
#def test():
#   f=urllib.urlopen('http://www.baidu.com')
#   while True:
#     firstLine=f.readline()
#     print firstLine
#针对于百度贴吧获取前十页楼主小说文本内容
class BDTB:
   def __init__(self,baseUrl,seeLZ):
     #成员变量
     self.baseURL=baseUrl
     self.seeLZ='?see_lz='+str(seeLZ)
   #获取该页帖子的代码
   def getPage(self,pageNum):
     try:
        url=self.baseURL+self.seeLZ+'&pn='+str(pageNum)
        #创建request对象
        request=urllib2.Request(url)
        response=urllib2.urlopen(request)
        #print 'URL:'+url
        return response.read()
     except Exception,e:
        print e
   #匹配标题
   def Title(self):
     html=self.getPage(1)
     #compile提高正则匹配效率
     reg=re.compile(r'<title>(.*?)。')
     #返回list列表
     items=re.findall(reg,html)
     f=open('output.txt','w+')
     item=('').join(items)
     f.write('\t\t\t\t\t'+item.encode('gbk'))
     f.close()
   #匹配正文
   def Text(self,pageNum):
     html=self.getPage(pageNum)
     #compile提高正则匹配效率
     reg=re.compile(r'"d_post_content j_d_post_content ">(.*?)</div>')
     #返回list列表
     items=re.findall(reg,html)
     f=open('output.txt','a+')
     #[1:]切片,第一个元素不需要,去掉。
     for i in items[1:]:
        #超链接去除
        removeAddr=re.compile('<a.*?>|</a>')
        #用""替换
        i=re.sub(removeAddr,"",i)
        #<br>去除
        i=i.replace('<br>','')
        f.write('\n\n'+i.encode('gbk'))
     f.close()
#调用入口
baseURL='http://tieba.baidu.com/p/4638659116'
bdtb=BDTB(baseURL,1)
print '爬虫正在启动....'.encode('gbk')
#多页
bdtb.Title()
print '抓取标题完毕!'.encode('gbk')
for i in range(1,11):
  print '正在抓取第%02d页'.encode('gbk')%i
  bdtb.Text(i)
print '抓取正文完毕!'.encode('gbk')
Python 相关文章推荐
Python删除空文件和空文件夹的方法
Jul 14 Python
Python 中 list 的各项操作技巧
Apr 13 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
python中字符串的操作方法大全
Jun 03 Python
对python条件表达式的四种实现方法小结
Jan 30 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
python实现拉普拉斯特征图降维示例
Nov 25 Python
python DataFrame转dict字典过程详解
Dec 26 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
tensorflow 初始化未初始化的变量实例
Feb 06 Python
分享Python异步爬取知乎热榜
Apr 12 Python
Python使用time模块实现指定时间触发器示例
May 18 #Python
Python实现的文本简单可逆加密算法示例
May 18 #Python
Python操作MongoDB详解及实例
May 18 #Python
Python 迭代器与生成器实例详解
May 18 #Python
Python字符串处理实例详解
May 18 #Python
Python进阶-函数默认参数(详解)
May 18 #Python
Python装饰器实现几类验证功能做法实例
May 18 #Python
You might like
深入PHP变量存储的详解
2013/06/13 PHP
php中rename函数用法分析
2014/11/15 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
express框架下使用session的方法
2019/07/31 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
js实现简单点赞操作
2020/03/17 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
Python类属性与实例属性用法分析
2015/05/09 Python
Python中的choice()方法使用详解
2015/05/15 Python
详解Python中的文件操作
2016/08/28 Python
使用python存储网页上的图片实例
2018/05/22 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
六查六看自查材料
2014/02/17 职场文书
白血病募捐倡议书
2014/05/14 职场文书
工会主席事迹材料
2014/06/03 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书