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中除法使用的注意事项
Aug 21 Python
Python实现的Excel文件读写类
Jul 30 Python
分析并输出Python代码依赖的库的实现代码
Aug 09 Python
Python简单实现socket信息发送与监听功能示例
Jan 03 Python
Python编程实现从字典中提取子集的方法分析
Feb 09 Python
Python 将pdf转成图片的方法
Apr 23 Python
Python常见内置高效率函数用法示例
Jul 31 Python
python文件选择对话框的操作方法
Jun 27 Python
python 提取文件指定列的方法示例
Aug 07 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 Python
python 提高开发效率的5个小技巧
Oct 19 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
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
德国网上超市:myTime.de
2019/08/26 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
安全先进班组材料
2014/12/26 职场文书
社区六一儿童节活动总结
2015/02/11 职场文书
投标售后服务承诺书
2015/04/29 职场文书
养成教育工作总结
2015/08/13 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
Nginx限流和黑名单配置
2022/05/20 Servers