关于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模式(客户端+服务器)来使用 ...
随机推荐
- 蜗牛慢慢爬 LeetCode 2. Add Two Numbers [Difficulty: Medium]
题目 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...
- vbs习题
练习题: 1.输入3个数,输出其中最大的那个值. Option Explicit Dim intA,intB,intC intA=CInt(InputBox("请输入a:")) i ...
- kafka describe 显示结果解释
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic Topic:my- ...
- 移植spdylay到libcurl
Libcurl是第三方网络库,支持各种网络协议 SPDY是Google提出的用来替代HTTP1.1的网络协议, 目前google.com, facebook.com, twitter.com服务器端都 ...
- MySql中的varchar类型
转载:http://www.cnblogs.com/doit8791/archive/2012/05/28/2522556.html 1.varchar类型的变化 MySQL 数据库的varchar类 ...
- js 变量定义的注意点
- 下载文件 通过a 标签 请求某个servlet进行下载的
下载文件 通过a 标签 请求某个servlet进行下载的
- Selenium遇到问题unknown error:cannot create default profile directory......
1.selenium遇到问题unknown error:cannot create default profile directory...... 2.解决方案 问题1:把驱动放入C:\Windows ...
- 降雨量 HYSBZ - 1067(RMQ)
F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ Login Register 捐赠本站 Notice:1:注册本OJ方式请见ht ...
- 【BZOJ3028】食物(生成函数)
[BZOJ3028]食物(生成函数) 题面 一个人要带\(n\)个物品,共有\(8\)种物品,每种的限制分别如下: 偶数个;0/1个;0/1/2个;奇数个; 4的倍数个;0/1/2/3个;0/1个;3 ...