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+pandas分析nginx日志的实例
Apr 28 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
Sep 14 Python
python实现反转部分单向链表
Sep 27 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
python3.7简单的爬虫实例详解
Jul 08 Python
Python中pymysql 模块的使用详解
Aug 12 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
python实现QQ邮箱发送邮件
Mar 06 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
python开发前景如何
Jun 11 Python
如何通过一篇文章了解Python中的生成器
Apr 02 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
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
php写app用的框架整理
2019/09/29 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
js的三种继承方式详解
2017/01/21 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
Python bytes string相互转换过程解析
2020/03/05 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
Python用户自定义异常的实现
2020/12/25 Python
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
房地产销售计划书
2014/01/10 职场文书
复兴之路观后感
2015/06/02 职场文书