关于Re模块的一些基础知识(另附一段批量抓代理ip的代码)
1.常用匹配规则
. 表示任意字符
[0-9] 用来匹配一个指定的字符类别
[^5]表示除了5之外的其他字符,^不在字符串的开头,则表示它本身。
* 对于前一个字符重复0到无穷次
+ 对于前一个字符重复1到无穷次
?对于前一个字符重复0到1次
{m,n} 对于前一个字符重复次数在为m到n次,其中,{0,} = *,{1,} = , {0,1} = ?
{m} 对于前一个字符重复m次
| 表示"或"
python默认开启了贪婪模式的,.+?,.*?,?? #其中?表示开启非贪婪模式,也就是说只匹配一次
\d 匹配任何十进制数;它相当于类 [0-9]
\D 匹配任何非数字字符;它相当于类 [^0-9]
\s 匹配任何空白字符;它相当于类 [ fv]
\S 匹配任何非空白字符;它相当于类 [^ fv]
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
2.re模块常用方法
re.match(pattern, string, flags=0) match只有当且仅当被匹配的字符串开头就能匹配
re.search(pattern, string, flags=0) 任意位置匹配,返回_sre.SRE_Match对象
re.compile(pattern, flags=0) 编译正则表达式
prog = re.compile(pattern)
result = prog.match(string)
等价于
result = re.match(pattern, string)
re.split(pattern, string, maxsplit=0) 通过正则表达式将字符串分离
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
re.findall(pattern, string, flags=0) 找到 RE 匹配的所有子串,并把它们作为一个列表返回
re.finditer(pattern, string, flags=0) 找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。
re.sub(pattern, repl, string, count=0, flags=0) 找到 RE 匹配的所有子串,并将其用一个不同的字符串替换。
re.subn(pattern, repl, string, count=0, flags=0) 与re.sub方法作用一样,但返回的是包含新字符串和替换执行次数的两元组。
re.escape(string)对字符串中的非字母数字进行转义
re.purge() 清空缓存中的正则表达式
3.正则表达式对象
re.RegexObject
re.compile()返回RegexObject对象
re.MatchObject
group()返回被 RE 匹配的字符串
start()返回匹配开始的位置
end()返回匹配结束的位置
span()返回一个元组包含匹配 (开始,结束) 的位置
>>> import re
>>> a = re.search('a','abc')
>>> a.group()
'a'
>>> b = re.findall('b','abc')
>>> b
['b']
抓代理ip的代码区
import urllib
import urllib2
import re def url_open(url):
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0')
response = urllib2.urlopen(req)
html = response.readline()
save_ip_list = []
while html:
ip = re.search(r'(?:(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])',html)
if ip:
now_ip = ip.group()
p = re.findall(r'<td>(.+?)</td>',response.readline())
for port in p:
list = str(now_ip)+":"+str(port)
print list
save_ip_list.append(list) html = response.readline()
return save_ip_list def save_ip():
url = "http://www.xicidaili.com/nt/2"
save_ip_list = url_open(url)
f = open('test.txt','w')
for i in save_ip_list:
f.write(i+'\n')
f.close
if __name__ == '__main__':
save_ip()
关于Re模块的一些基础知识(另附一段批量抓代理ip的代码)的更多相关文章
- VIM基础知识整理(附思维导图)
这是当时初学VIM后做的一个思维导图,图片稍大,所以从freemind导出了html文本po在下面:图片在最下方,放大可清晰浏览. VIM 普通模式 普通编辑命令 功能:浏览,普通编辑 x:删除光标所 ...
- python基础学习1-网络爬虫程序中的代理IP设置
#!/usr/bin/env python # -*- coding:utf-8 -*-网络爬虫代理 import urllib.request import random url="htt ...
- Python基础知识详解 从入门到精通(七)类与对象
本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...
- 基础知识javascript--事件
群里有一个小伙伴在处理事件监听函数的时候,遇到了一点问题,正好我比较空闲,于是帮他指出了代码中的问题,顺便整理一下,方便以后遇到类似问题的伙伴们有一个参考. 这是一个很简单的问题,对于基础知识比较杂实 ...
- C#网络编程基础知识
C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...
- Linux运维笔记(一)网络基础知识
网络基础知识 一.基本概念 1.ARPANET & TCP/IP:以“软件”技术将网络硬件整合,使得不同的计算机或者数据可以通过这个软件达成数据沟通(TCP/IP技术也被称为Internet) ...
- Java网络编程一:基础知识详解
网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层 ------------ ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- ansible学习基础知识和模块(一)
基础知识补充: 常用自动化运维工具 Ansible:使用python来开发的,无需设置Agentless(代理),一般管理几百台.与ssh的方式也不一样,ssh是基于c/s模式(客户端+服务器)来使用 ...
随机推荐
- IP地址转换32为长整型
Programming Question: Convert an IPv4 address in the format of null-terminated C string into a 32-bi ...
- 第97天:CSS3渐变和过渡详解
一.渐变 渐变是CSS3当中比较丰富多彩的一个特性,通过渐变我们可以实现许多炫丽的效果,有效的减少图片的使用数量,并且具有很强的适应性和可扩展性. 可分为线性渐变.径向渐变 1. 线性渐变 (grad ...
- Graph-Based image segmentation method
1.Graph-Based 方法简介 基于图的图像分割方法将图像伪造成带权值无向图的形式 : G = (V, E) 其中,V是顶点集合,把图像中的每个像素或者每个区域看成图的一个顶点:E是边的集合,连 ...
- bzoj2818 Gcd(欧拉函数)
Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...
- BZOJ3261:最大异或和——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3261 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.A x:添加 ...
- Linux内核设计第五周学习总结 分析system_call中断处理过程
陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 使用gdb跟踪分析一 ...
- WebDriver的定位元素方法
如果把页面上的元素看作人的话,在现实世界如何找到某人呢?方法有三: 一.通过人本身的属性,例如他的姓名,手机号,身份证号,性别,这些可区别他人的属性.在web页面上的元素也有这些属性,例如,id.na ...
- 【bzoj4195】【NOI2015】程序自动分析
4195: [Noi2015]程序自动分析 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 3470 Solved: 1626[Submit][Sta ...
- requests、BeautifulSoup、自动登陆示例
requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...
- C++之正则表达式20171121
准确来说,不论在C++或C中,只要在Linux系统中都可以使用本文讲诉的正则表达式使用方式. 一.Linux中正则表达式的使用步骤: 编译正则表达式 regcomp() 匹配正则表达式 regexec ...