首先,我们来看一下,爬虫前基本的知识点概括

一. match()方法:

这个方法会从字符串的开头去匹配(也可以指定开始的位置),如果在开始没有找到,立即返回None,匹配到一个结果,就不再匹配。

我们可以指定开始的位置的索引是3,范围是3-10,那么python将从第4个字符'1'开始匹配,只匹配一个结果。

group()获得一个或多个分组的字符串,指定多个字符串时将以元组的形式返回,group(0)代表整个匹配的字串,不填写参数时,group()返回的是group(0)。

 import re

 pattern = re.compile(r'\d+')     #匹配数字一次以上
 m = pattern.match('one123two456')
 print m
 print m.group()

 #None
 #...AttributeError: 'NoneType' object has no attribute 'group'

 pattern = re.compile(r'\d+')     #匹配数字一次以上
 m = pattern.match('one123two456'. 3, 10)
 print m
 print m.group()

 #<_sre.SRE_Match object at 0x00000000026FAE68>
 

二. search()方法:

search方法与match比较类似,区别在于match()方法只检测是不是在字符串的开始位置匹配,search()会扫描整个字符串查找匹配,同样,search方法只匹配一次。

 import re

 pattern = re.compile(r'\d+')
 m = pattern.search('one123two456')
 print m.group()

三. findall()方法:

搜索字符串,以列表的形式返回全部能匹配的字串。

 import re

 pattern = re.compile(r'\d+')
 m = pattern.findall('one123two456')
 print m

 #['123', '456']

四. sub()方法:

用来替换每一个匹配的字符串,并返回替换后的字符串。

 import re

 pattern = re.compile(r'\d+')
 m = pattern.sub('abc', 'one123two456')
 print m

 #oneabctwo456

五. 实践:爬取内涵吧段子

 #-*-coding:utf-8-*-

 import requests
 import re

 class Spider:

     def __init__(self):
         self.page = 1

     def getPage(self, page):
         url = "http://www.neihan8.com/article/list_5_{}.html".format(page)
         response = requests.get(url)
         contents =  response.content.decode('gbk')   #查看网页源代码,内涵吧默认编码是charset=gb2312
         return contents

     def getContent(self):
         contents = self.getPage(self.page)
         pattern = re.compile('<h4>.*?<a href.*?html">(.*?)</a>.*?class="f18 mb20">(.*?)</div>', re.S)
         results = pattern.findall(contents)
         contents = []
         for item in results:
             title = re.sub('<b>|</b>', "", item[0])
             content = re.sub(r'<p>|</p>|<br />|&\w+;|<img alt.*|<div style=.*>|<div>|<p style="text-align: center; ">', "", item[1])
             content = re.sub(r'<div class="upload-txt.*baseline;">|<h1 class="title".*vertical-align: baseline;">|</h1>', "", content)
             content = re.sub(r'<div class=.*onclick="showAnswer(this)">|</a><div class="answer">', "", content)
             content = re.sub(r'<span style="color: rgb.*;">', "", content)
             contents.append([title, content])
         return contents

     def save_Data(self):
         file = open("duanzi.txt", "w+")
         x = 1
         y = 1
         for self.page in range(0, 507):
             contents = self.getContent()
             print u"正在写入第%d页的数据..." %(self.page+1)
             for item in contents:
                 file.write(str(x) + "." + item[0])
                 file.write("\n")
                 file.write(item[1])
                 file.write("=====================================================================================\n\n")
                 if item==contents[-1]:
                     file.write(u"********第" + str(y) + "页完********\n\n")
                     y += 1
                 x += 1
         print u"所有页面已加载完"

     def start(self):
         self.save_Data()

 spider = Spider()
 spider.start()

基本上可以获取段子的标题和内容,但由于内涵吧的段子越到后面标签越复杂,所以给替换标签带来了很大的难度。

Python爬虫之利用正则表达式爬取内涵吧的更多相关文章

  1. python爬虫:利用正则表达式爬取豆瓣读书首页的book

    1.问题描述: 爬取豆瓣读书首页的图书的名称.链接.作者.出版日期,并将爬取的数据存储到Excel表格Douban_I.xlsx中 2.思路分析: 发送请求--获取数据--解析数据--存储数据 1.目 ...

  2. Python爬虫之利用BeautifulSoup爬取豆瓣小说(一)——设置代理IP

    自己写了一个爬虫爬取豆瓣小说,后来为了应对请求不到数据,增加了请求的头部信息headers,为了应对豆瓣服务器的反爬虫机制:防止请求频率过快而造成“403 forbidden”,乃至封禁本机ip的情况 ...

  3. Python爬虫学习之正则表达式爬取个人博客

    实例需求:运用python语言爬取http://www.eastmountyxz.com/个人博客的基本信息,包括网页标题,网页所有图片的url,网页文章的url.标题以及摘要. 实例环境:pytho ...

  4. python爬虫:利用BeautifulSoup爬取链家深圳二手房首页的详细信息

    1.问题描述: 爬取链家深圳二手房的详细信息,并将爬取的数据存储到Excel表 2.思路分析: 发送请求--获取数据--解析数据--存储数据 1.目标网址:https://sz.lianjia.com ...

  5. Python爬虫之利用BeautifulSoup爬取豆瓣小说(二)——回车分段打印小说信息

    在上一篇文章中,我主要是设置了代理IP,虽然得到了相关的信息,但是打印出来的信息量有点多,要知道每打印一页,15个小说的信息全部会显示而过,有时因为屏幕太小,无法显示全所有的小说信息,那么,在这篇文章 ...

  6. Python爬虫之利用BeautifulSoup爬取豆瓣小说(三)——将小说信息写入文件

    #-*-coding:utf-8-*- import urllib2 from bs4 import BeautifulSoup class dbxs: def __init__(self): sel ...

  7. 初识python 之 爬虫:使用正则表达式爬取“糗事百科 - 文字版”网页数据

    初识python 之 爬虫:使用正则表达式爬取"古诗文"网页数据 的兄弟篇. 详细代码如下: #!/user/bin env python # author:Simple-Sir ...

  8. Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...

  9. Python爬虫实战一之爬取糗事百科段子

    大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...

随机推荐

  1. 插叙LTE-2

      LTE TDD与LTE FDD技术简介和比较 标签: 频分双工(FDD) 时分双工(TDD) LTE 摘要:UTRA 的长期演进(Long Term Evolution ,LTE) 技术存在LTE ...

  2. python多线程安全local()

    import time import threading from threading import local class Foo(local): pass # 实例化(创建)对象 foo = Fo ...

  3. Android-实现切换Fragment页功能

    场景:使用Fragment实现切页. 类结构: 一:Activity Activity中使用getSupportFragmentManager().beginTransaction()来填充一个Fra ...

  4. 《Deep learning》第四章——数值计算

    数值计算 机器学习算法通常需要大量的数值计算.这通常是指通过迭代过程更新解的估计值来解决数学问题的算法,而不是通过解析过程推导出公式来提供正确解的方法.常见的操作包括优化(找到最小化或最大化函数值的参 ...

  5. Python之模块和包(Day21)

    一.Python模块 Python模块(module),是一个Python文件,以.py结尾,包含了Python对象定义和Python语句. 模块让你能够有逻辑的组织你的Python代码段 把相关的代 ...

  6. HDF及HDF-EOS数据格式简介

    HDF-EOS数据格式介绍 HDF(Hierarchy Data Format )数据格式是美国伊利诺伊大学国家超级计算应用中心(NCSA ,National Central for Super co ...

  7. 通过ip得到所在城市,以及城市所在经纬度坐标(监控系统中用的该代码,小航哥)

    监控系统中就是利用的该段代码,实现通过ip得到所在城市,以及城市所在经纬度坐标,最后得以利用echarts实现模拟迁移的效果 api官方介绍: http://lbsyun.baidu.com/inde ...

  8. Sourse Insight使用过程中的常使用功能简介

    1.查找定义: 在编辑区内,选中任意一个变量.函数.宏等,点击右键->Jump Definition,或者直接Ctrl+左击 2.编辑区切换

  9. cocos打包出现错误,执行命令出错,返回值:2。 Traceback (most recent call last): File "E:\cocos_workspace\MyGameOne\proj.android\build_native.py", line 43, in <module> build(opts.build_mode) File "E:\cocos_workspace\MyGa

    先看看NDK的版本,如果不行,就删除\proj.android\obj\local\armeabi下的文件.

  10. Linux 基础一---操作系统&常用命令

    UNIX是一个计算机操作系统,一个用来协调.管理和控制计算机硬件和软件资源的控制程序. 1.UNIX操作系统的特点:多用户和多任务: a) 多用户表示在同一时刻可以有多个用户同时使用UNIX操作系统而 ...