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. UFUN函数 UF_ATTR函数(UF_ATTR_read_value 函数用法)

    //此函数的功能是输入tag值,返回与属性标题对应的属性值 static string read_attr(tag_t object_tag) { UF_initialize(); ]="零 ...

  2. podium podlets 说明

    podlets 提供了一个页面片段服务,podlets 包含了一些元数据信息,通过json 暴露, 主要包含以下内容 一个 http endpoint 提供主要内容 一个 http endpoint ...

  3. Zookeeper在分布式架构中的应用

    Zookeeper 是一个高性能.高可靠的分布式协调系统,是 Google Chubby 的一个开源实现.Zookeeper 能够为分布式应用提供一致性服务,提供的功能包括:配置维护.域名服务.分布式 ...

  4. 05-树9 Huffman Codes (30 分)

    In 1953, David A. Huffman published his paper "A Method for the Construction of Minimum-Redunda ...

  5. pytest + allure 生成测试报告

    pytest测试样例规则:测试文件以test_开头(以_test结尾也可以)测试类以Test开头,并且不能带有 init 方法测试函数以test_开头断言使用基本的assert即可 ubuntu 安装 ...

  6. 【POJ1426】Find The Multiple

    本题传送门 本题知识点:深度优先搜索 | 宽度优先搜索 题意很简单,让我们找一个只有1和0组成的十位数是n的倍数的数. 这题一开始吓到我了--因为Output里说输出的长度最长不超过100位???那是 ...

  7. mybatis多参数查询问题:org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available par

    错误如下:  这个是由于在执行sql的时候无法匹配sql语句的通配符造成的,有两种方式可以解决 第一种:在sql语句中通配符这样写,用0,1匹配:  第二种:在dao接口的方法中的参数前面加param ...

  8. 提前体验让人"回归Windows怀抱"的Windows Terminal

    前言 在一年一度的微软开发者大会Build 2019登场的Windows Terminal饱受好评,大家对其也是充满了兴趣和热情,程序员的朋友圈都被微软发布的最新终端 windows Terminal ...

  9. Centos7 守护进程supervisord 安装使用

    pervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统.它 ...

  10. 年轻人的第一个自定义 Spring Boot Starter!

    陆陆续续,零零散散,栈长已经写了几十篇 Spring Boot 系列文章了,其中有介绍到 Spring Boot Starters 启动器,使用的.介绍的都是第三方的 Starters ,那如何开发一 ...