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实现ipsec开权限实例
Nov 11 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
Python API自动化框架总结
Nov 12 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 Python
python实现跨excel sheet复制代码实例
Mar 03 Python
python3 实现口罩抽签的功能
Mar 11 Python
PyTorch-GPU加速实例
Jun 23 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 Python
Pyhton爬虫知识之正则表达式详解
Apr 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
解析数组非数字键名引号的必要性
2013/08/09 PHP
php计算title标题相似比的方法
2015/07/29 PHP
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
python如何重载模块实例解析
2018/01/25 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
对Django url的几种使用方式详解
2019/08/06 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
Django的CVB实例详解
2020/02/10 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
泰国第一在线超市:Tops
2021/02/13 全球购物
大专毕业生自我评价分享
2013/11/10 职场文书
售后服务科岗位职责范文
2013/11/13 职场文书
员工保密承诺书
2014/05/28 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
铁人观后感
2015/06/16 职场文书
2015暑假假期总结
2015/07/13 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
聊聊Python String型列表求最值的问题
2022/01/18 Python