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生成XML的方法实例
Mar 21 Python
Python实现的简单dns查询功能示例
May 24 Python
使用Django和Python创建Json response的方法
Mar 26 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
python命名空间(namespace)简单介绍
Aug 10 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
wxPython实现文本框基础组件
Nov 18 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
Python 一行代码能实现丧心病狂的功能
Jan 18 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
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
YII中assets的使用示例
2014/07/31 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
PHP函数超时处理方法
2016/02/14 PHP
Javascript 面向对象 命名空间
2010/05/13 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
js实现购物车功能
2018/06/12 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
python与php实现分割文件代码
2017/03/06 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
python list格式数据excel导出方法
2018/10/31 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
python实现顺时针打印矩阵
2019/03/02 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
python opencv如何实现图片绘制
2020/01/19 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
与UNIX有关的几个名词
2015/09/17 面试题
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
化学专业毕业生自荐信
2013/11/15 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
八年级英语教学计划
2015/01/23 职场文书