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  __getattr__与__setattr__使用方法
Sep 06 Python
Windows8下安装Python的BeautifulSoup
Jan 22 Python
python实现清屏的方法
Apr 30 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
python逐行读写txt文件的实例讲解
Apr 03 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
python爬虫之自制英汉字典
Jun 24 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
python绘图subplots函数使用模板的示例代码
Apr 30 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 Python
pytorch 6 batch_train 批训练操作
May 28 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/10/27 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
javascript 写类方式之一
2009/07/05 Javascript
Aptana调试javascript图解教程
2009/11/30 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
Python 详解基本语法_函数_返回值
2017/01/22 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
如何用Python 加密文件
2020/09/10 Python
佳能法国商店:Canon法国
2019/02/14 全球购物
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
优秀大学生推荐信范文
2013/11/28 职场文书
应用艺术毕业生的自我评价
2013/12/04 职场文书
优秀员工获奖感言
2014/03/01 职场文书
家长对学生的评语
2014/04/18 职场文书
卖车协议书
2014/04/21 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
python实现的web监控系统
2021/04/27 Python
python 网络编程要点总结
2021/06/18 Python
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android