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 27 Python
跟老齐学Python之永远强大的函数
Sep 14 Python
Python使用django获取用户IP地址的方法
May 11 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
tensorflow模型保存、加载之变量重命名实例
Jan 21 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
python能做哪些生活有趣的事情
Sep 09 Python
django跳转页面传参的实现
Sep 17 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 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
如何将数据从文本导入到mysql
2006/10/09 PHP
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
jQuery实现html元素拖拽
2015/07/21 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
使用Python对Csv文件操作实例代码
2017/05/12 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
对python中Json与object转化的方法详解
2018/12/31 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
django中嵌套的try-except实例
2020/05/21 Python
如何用PHP实现邮件发送
2012/12/26 面试题
现场施工员岗位职责
2014/03/10 职场文书
代理人委托书
2014/08/01 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
财务稽核岗位职责
2015/04/13 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis