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 相关文章推荐
php使用递归与迭代实现快速排序示例
Jan 23 Python
python在linux系统下获取系统内存使用情况的方法
May 11 Python
python装饰器与递归算法详解
Feb 18 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
python实现XML解析的方法解析
Nov 16 Python
Python tkinter实现图片标注功能(完整代码)
Dec 08 Python
在python3中实现更新界面
Feb 21 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
pycharm无法导入lxml的解决办法
Mar 31 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 Python
python实现剪贴板的操作
Jul 01 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
两个强悍的php 图像处理类1
2009/06/15 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
封装的原生javascript弹出层代码
2010/09/24 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
js 颜色选择插件
2017/01/23 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
Python的垃圾回收机制深入分析
2014/07/16 Python
Python中的random()方法的使用介绍
2015/05/15 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
深入理解Django-Signals信号量
2019/02/19 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
python实现坦克大战
2020/04/24 Python
Python编写单元测试代码实例
2020/09/10 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
应届毕业生求职信范文分享
2013/12/26 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
网站创业计划书
2014/04/30 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
护士年终个人总结
2015/02/13 职场文书
建议书的格式及范文
2015/09/14 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
python 安全地删除列表元素的方法
2022/03/16 Python