Python爬虫之利用正则表达式爬取内涵吧
首先,我们来看一下,爬虫前基本的知识点概括

一. 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爬虫之利用正则表达式爬取内涵吧的更多相关文章
- python爬虫:利用正则表达式爬取豆瓣读书首页的book
1.问题描述: 爬取豆瓣读书首页的图书的名称.链接.作者.出版日期,并将爬取的数据存储到Excel表格Douban_I.xlsx中 2.思路分析: 发送请求--获取数据--解析数据--存储数据 1.目 ...
- Python爬虫之利用BeautifulSoup爬取豆瓣小说(一)——设置代理IP
自己写了一个爬虫爬取豆瓣小说,后来为了应对请求不到数据,增加了请求的头部信息headers,为了应对豆瓣服务器的反爬虫机制:防止请求频率过快而造成“403 forbidden”,乃至封禁本机ip的情况 ...
- Python爬虫学习之正则表达式爬取个人博客
实例需求:运用python语言爬取http://www.eastmountyxz.com/个人博客的基本信息,包括网页标题,网页所有图片的url,网页文章的url.标题以及摘要. 实例环境:pytho ...
- python爬虫:利用BeautifulSoup爬取链家深圳二手房首页的详细信息
1.问题描述: 爬取链家深圳二手房的详细信息,并将爬取的数据存储到Excel表 2.思路分析: 发送请求--获取数据--解析数据--存储数据 1.目标网址:https://sz.lianjia.com ...
- Python爬虫之利用BeautifulSoup爬取豆瓣小说(二)——回车分段打印小说信息
在上一篇文章中,我主要是设置了代理IP,虽然得到了相关的信息,但是打印出来的信息量有点多,要知道每打印一页,15个小说的信息全部会显示而过,有时因为屏幕太小,无法显示全所有的小说信息,那么,在这篇文章 ...
- Python爬虫之利用BeautifulSoup爬取豆瓣小说(三)——将小说信息写入文件
#-*-coding:utf-8-*- import urllib2 from bs4 import BeautifulSoup class dbxs: def __init__(self): sel ...
- 初识python 之 爬虫:使用正则表达式爬取“糗事百科 - 文字版”网页数据
初识python 之 爬虫:使用正则表达式爬取"古诗文"网页数据 的兄弟篇. 详细代码如下: #!/user/bin env python # author:Simple-Sir ...
- Python爬虫实战二之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...
- Python爬虫实战一之爬取糗事百科段子
大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...
随机推荐
- 小白学linux命令
小白是景女神全栈开发股份有限公司的一名财务实习员工,经过3个月的实习期,小白是过五关斩六将啊!终于成为了公司的一名正式员工,而且收到了景总亲自发来贺喜的邮件:“欢迎你加入大家庭,公司也本着员工全面发展 ...
- 什么是lambda函数?它有什么好处?
lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数. lambda 函数不能包含命令,它们所包含的表达式不能超过一个.不要试图向lambda 函数中塞入太多的东西: ...
- python基础:while循环,for循环
---恢复内容开始--- 1.使用while循环输出1 2 3 4 5 6 8 9 10 2.求1-100的所有数的和 3.输出 1-100 内的所有奇数 4.输出 1-100 内的所有偶数 ...
- 002-maven修改仓库以及镜像地址
1.将下载好的maven,修改配置 <localRepository>G:\mavenrepository-idea</localRepository> 2.修改增加镜像地址 ...
- OpenCV3计算机视觉+python(三)
使用OpenCV3处理图像 下面要介绍的内容都与图像处理有关,这时需要修改图像,比如要使用具有艺术性的滤镜.外插(extrapolate)某些部分.分割.粘贴或其他需要的操作. 不同色彩空间的转换 O ...
- tfboys——tensorflow模块学习(三)
tf.estimator模块 定义在:tensorflow/python/estimator/estimator_lib.py 估算器(Estimator): 用于处理模型的高级工具. 主要模块 ex ...
- Oracle学习笔记—oracle体系架构及状态(nomount、mount和open)简介
oracle体系架构简介 先来简要了解一下Oracle数据库体系架构以便于后面深入理解,Oracle Server主要由实例(instance)和数据库(database)组成.实例(instance ...
- 20170411 F110初始界面-建议清单
功能块代码 F110 开发类 FIBP 事务说明 自动付款参数 程序 SAPF ...
- LeetCode:罗马数字转整数【13】
LeetCode:罗马数字转整数[13] 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 10 ...
- active scaffold
模板文件路径:/.rvm/gems/ruby-2.2.3/gems/active_scaffold-3.5.3/app/views/active_scaffold_overrides