Python的正则表达式和爬虫
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的正则表达式和爬虫的更多相关文章
- python 使用正则表达式的爬虫
下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/article/list_5_1.html 打开之后,不难看到里面一个一个灰常有内涵的段子,当你进行翻页的时候,注 ...
- 常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)
大家好,我是辰哥~ 本文带大家学习正则表达式,并通过python代码举例讲解常用的正则表达式 最后实战爬取小说网页:重点在于爬取的网页通过正则表达式进行解析. 正则表达式语法 Python的re模块( ...
- python爬虫的一些小小问题、python动态正则表达式
1.首先urllib不能用了,需要引入的是urllib2,正则re. #coding=utf-8 # import urllib import urllib2 import re def getHtm ...
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】
[python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...
- 【Python】:简单爬虫作业
使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...
- python 3.3.2 爬虫记录
网络上大部分关于python爬虫的介绍以及代码讲解,都用的是python2.7或以下版本,用python3.x版本的甚少. 在python3.3.2版本中,没有urllib2这个库,也没有cookie ...
- Python:正则表达式详解
正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...
- 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块
feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...
- 孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4
孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...
随机推荐
- windows 命令
1.查看端口占用: netstat -ano|findstr 8080 2.查看网络端口:ipconfig/all
- SOS从内存转储中提取模块(EXE、DLL和其他二进制文件)
假设有一种情况,您从客户那里得到一个内存转储,需要模块(DLL.EXE.OCX等)来进一步调试..(.NET模块可用于通过反向工程查看源代码.)我们可以使用windbg目录中的clr10\sos.dl ...
- random库
伪随机数的原因: random库中函数主要用于产生各种分布的伪随机数序列.random库中的随机函数是按照一定算法模拟产生的,其概率是确定的.可见的,所以被称为伪随机数.而真正意义上的随机数是按照实验 ...
- Struts2框架的搭建
Struts2是WebWork框架的升级版本,替代了Servlet. 由于用IDEA下载jar包失败,直接创建手动导包. 1.导包: (1)Struts2的目录结构: (2)导入jar包: 2.书写A ...
- JS的ES6的Generator
JS的ES6的Generator 1.Generator函数的概念: ES6提供的解决异步编程的方案之一,现在已经不怎么用了被淘汰了. Generator函数是一个状态机,内部封装了不同状态的数据. ...
- 鸿蒙OS
8月9日,华为消费者业务在其全球开发者大会上正式发布其全新的基于微内核的面向全场景的分布式操作系统——鸿蒙OS(HarmonyOS)! 鸿蒙的定义是基于微内核的全场景分布式操作系统.其中,微内核是技术 ...
- bzoj4605: 崂山白花蛇草水 权值线段树套KDtree
bzoj4605: 崂山白花蛇草水 链接 bzoj loj 思路 强制在线,那就权值线段树套KDtree好了,没啥好讲的. KDtree要加平衡因子来重构.另外,那水真难喝. 错误 树套树一边写过了, ...
- linux修改/etc/profile权限
修改/etc/profile时提示为只读文件,不允许修改, 敲#chmod 777 /etc/profile后仍不允许修改 解决办法: 在root权限下敲 #:mount -o remount,rw ...
- Linux里使用rz和sz命令
lrzsz是一个unix通信套件提供的X,Y,和ZModem文件传输协议,官网:http://freecode.com/projects/lrzsz/ windows 需要向centos服务器上传文件 ...
- Vector与ArrayList 的理解
最近在看Vector与ArrayList的源码,看下他们的区别与联系. Vector是线程安全的集合类,ArrayList并不是线程安全的类.Vector类对集合的元素操作时都加了synchroniz ...