1、常用元字符

.    匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

2、常用限定符(量词)

*    重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

3、常用反义词

\W    匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

4、单字符匹配

[]匹配单个字符,多个[]匹配多个字符
#0-9范围的数字
[0-9]
#A-Z范围的字母
[A-Z]
#a-z范围的字母
[a-z]
#全部范围的数字和字母
[0-9a-zA-Z]

5、其他特殊字符

#^标识开始符,$表示结束符,加这两个表示限定边界
^hello$
#|表示或者
^alex|tom$
#非符号,表示除了当前字符
[^al]
#.(除换行符外所有字符),一般和*连用(.*x)但他默认是贪婪模式,会尽量多的匹配x字符,直到匹配到最后一个x停止,非贪婪模式为:(.*?x)表示匹配到?后的字符x就停止匹配
a.
#分组,表示分组内的正则是一起生效的
(jd|taobao)

6、python中的正则使用

#查询所有匹配的字符,返回一个集合
ret = re.findall("[2a]","2babac2c")
#查询第一个匹配到的字符,返回单个对象
ret = re.search("[2a]","2babac2c") #findall分组会优先显示分组内的内容,?:可以取消优先显示
ret = re.findall("www.(?:baidu|googole).com","www.baidu.com")
print(ret)
#search分组,通过group(n)拿到数据
ret = re.search("(\d)(\d\.\d{2})(\d)","1asda22.13123asdasd3")
print(ret.group(1))
print(ret.group(2))
print(ret.group(3)) #分组命名?P=name和?P=name必须一致,否则报错
ret = re.search("<(?P<tag>\w+)>\w+</(?P=tag)>","<h1>hello</h1>")
print(ret.group('tag')) #当一个正则被多次使用的时候,需要提前编译,可以节省效率
ret = re.compile("正则表达式")
ret.findall("数据") #当需要懒加载查询时,使用finditer可以节省空间,返回对象,通过group()方法获取数据
ret.finditer("数据")

7、爬虫练习

#爬虫练习
from urllib.request import urlopen
import re #读取网页的数据
def readPageData(number):
url = "https://movie.douban.com/top250?start=%s&filter=" % number
url = urlopen(url)
return url.read().decode("utf-8") def getFileData(ret,content):
lst = ret.finditer(content)
for s in lst:
lst = {
"id": s.group("id"),
"name": s.group("title"),
"evaluate": s.group("evaluate"),
"introduction": s.group("introduction")
}
yield lst def main(ret):
content = readPageData(count)
lst = getFileData(ret,content)
print(lst)
#写入文件
f = open("E:\python_workspace\movie.txt","a+",encoding = "utf-8")
for obj in lst:
print(obj)
data = str(obj)
f.write(data + "\n")
f.close() #re.S表示 .会匹配所有字符
ret = re.compile('<em class="">(?P<id>\d+)</em>.*?<span class="title">(?P<title>.*?)</span>.*?<div class="star">.*?<span property=".*?" content=".*?"></span>.*?<span>(?P<evaluate>.*?)</span>.*?<span class="inq">(?P<introduction>.*?)</span>', re.S)
count = 0
for i in range(0,10):
main(ret)
count += 25

Python的正则表达式和爬虫的更多相关文章

  1. python 使用正则表达式的爬虫

    下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/article/list_5_1.html 打开之后,不难看到里面一个一个灰常有内涵的段子,当你进行翻页的时候,注 ...

  2. 常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)

    大家好,我是辰哥~ 本文带大家学习正则表达式,并通过python代码举例讲解常用的正则表达式 最后实战爬取小说网页:重点在于爬取的网页通过正则表达式进行解析. 正则表达式语法 Python的re模块( ...

  3. python爬虫的一些小小问题、python动态正则表达式

    1.首先urllib不能用了,需要引入的是urllib2,正则re. #coding=utf-8 # import urllib import urllib2 import re def getHtm ...

  4. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

  5. 【Python】:简单爬虫作业

    使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...

  6. python 3.3.2 爬虫记录

    网络上大部分关于python爬虫的介绍以及代码讲解,都用的是python2.7或以下版本,用python3.x版本的甚少. 在python3.3.2版本中,没有urllib2这个库,也没有cookie ...

  7. Python:正则表达式详解

    正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...

  8. 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块

    feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...

  9. 孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4

    孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...

随机推荐

  1. 上传OSS报错

    修改OSS

  2. linux mustache bash 实现mo 做为docker容器运行动态配置工具数组的处理

    前面有说过关于使用mo 工具的简单配置使用,但是实际中我们可能存在比较复杂的数据处理,比如数组,mo 可以进行数组的处理,但是在测试的过程中,一直失败,查看了官方的demo以及帮助命令发现可以通过参数 ...

  3. exlucas易错反思

    模板和题解 复习了一下 exlucas的模板,结果写挂四次(都没脸说自己以前写过 是该好好反思一下呢~ 错的原因如下: 第一次WA:求阶乘的时候忘了递归处理(n/p)! 第二次WA:求阶乘时把p当成循 ...

  4. share memory between guest and nic

    通过硬件的IOMMU,内核提供的共享内存.VFIO可以实现. REF: 1. offical DPDK API Doc, 简书有翻译版 DPDK编程指南(翻译)(一)  (二十七) 2. dpdk v ...

  5. 超级经典的HTTP协议讲解

    - HTTP 协议 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展. HTTP 协议的主 ...

  6. 【Beta】Scrum Meeting 7 & 与助教谈话

    前言 Beta阶段第7次会议在5月12日22:00由PM在大运村一公寓三层召开, 时长30min. 任务分配 姓名 今日任务 明日任务 困难 周博闻 修复修改密码问题#54添加主页公告栏 #57(调整 ...

  7. GoodNotes 模板分享

    画了一个A4纸模板,分享出来: 模板下载 原始PSD下载

  8. enable device: BAR 0 [mem 0x00000000-0x003fffff] not claimed

    /******************************************************************************* * enable device: BA ...

  9. MLflow系列2:MLflow追踪

    英文链接:https://mlflow.org/docs/latest/tracking.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11945089.h ...

  10. odoo开发笔记 -- 还原数据库后,异常:ir_attachment: IOError: [Errno 2] No such file or directory: u'/var/...'

    场景描述: 恢复Odoo数据后,抛出错误导致无法进入页面 -- ::, INFO aeo odoo.addons.base.ir.ir_attachment: _read_file reading / ...