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 模拟购物车的实例讲解
Sep 11 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
Python PIL读取的图像发生自动旋转的实现方法
Jul 05 Python
Django实现发送邮件功能
Jul 18 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
python tkinter组件使用详解
Sep 16 Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 Python
python中的 zip函数详解及用法举例
Feb 16 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 Python
Python wordcloud库安装方法总结
Dec 31 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
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
PHP 读取和编写 XML
2014/11/19 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
jquery validate.js表单验证的基本用法入门
2010/05/13 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
python 捕获shell脚本的输出结果实例
2017/01/04 Python
python2 与python3的print区别小结
2018/01/16 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
python中entry用法讲解
2020/12/04 Python
python包的导入方式总结
2021/03/02 Python
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
高中的职业生涯规划书
2013/12/28 职场文书
社会实践心得体会
2014/01/03 职场文书
党员评议思想汇报
2014/10/08 职场文书
维稳承诺书
2015/01/20 职场文书
开会通知短信大全
2015/04/20 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书