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 flask中静态文件的管理方法
Mar 20 Python
python机器学习之贝叶斯分类
Mar 26 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
深入浅析python 中的匿名函数
May 21 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
QML使用Python的函数过程解析
Sep 26 Python
python 实现Harris角点检测算法
Dec 11 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 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
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
python mysqldb连接数据库
2009/03/16 Python
python缩进区别分析
2014/02/15 Python
python基础教程之匿名函数lambda
2017/01/17 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
Python整数对象实现原理详解
2019/07/01 Python
为您的家、后院、车库等在线购物:Spreetail
2019/06/17 全球购物
C语言中break与continue的区别
2012/07/12 面试题
2019史上最全Database工程师题库
2015/12/06 面试题
2013届毕业生求职信范文
2013/11/20 职场文书
英语国培研修感言
2014/02/13 职场文书
天地会口号
2014/06/17 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
节水宣传标语口号
2015/12/26 职场文书