python 正则表达式知识点
正则 常用符号
. : 匹配任意字符,换行符除外
* : 匹配前一个字符 0 次或者无限次
? : 匹配前一个字符 0次或者1次
.* : 贪心算法
.*? :非贪心算法
(): 括号内的数据作为结果返回
正则常用方法:
findall: 匹配所有符合规律的内容,返回包含结果的列表
Search: 匹配并提取第一个符合规律的内容,返回一个正则表达式对象
Sub: 替换符合规律的内容,返回替换后的值
正则表达式的基本应用 ,使用正则表达式过滤一个简单的test文件
test 文件如下
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>极客学院爬虫测试</title> </head> <body> <div> <a href="http://www.jikexueyuan.com/welcome.html"></a>《python定向爬虫入门》 <div> <ul> <li><a href="http://www.jikexueyuan.com/1.html">这是第一条</a></li> <li><a href="http://www.jikexueyuan.com/2.html">这是第二条</a></li> <li><a href="http://www.jikexueyuan.com/3.html">这是第三条</a></li> <li><a href="http://www.jikexueyuan.com/4.html">这是第四条</a></li> </ul> </div> </div> </body> </html>
正则使用效果如下
#coding:utf-8 import re old_url='http://www.jikexueyuan.com/course/web/?pageNum=2' total_page=13 f = open('t1.txt','r',encoding="utf-8") html = f.read() f.close() #爬取标题 title = re.search('<title>(.*?)</title>',html,re.S).group(1)#使用search 找到所需要的内容,就返回 print(title) 执行代码,显示如下 极客学院爬虫测试 #爬取链接 links = re.findall('href="(.*?)"',html,re.S) print(links) 执行代码,显示如下 ['http://www.jikexueyuan.com/welcome.html', 'http://www.jikexueyuan.com/1.html', 'http://www.jikexueyuan.com/2.html', 'http://www.jikexueyuan.com/3.html', 'http://www.jikexueyuan.com/4.html'] #提取文字 text_filed = re.findall('<ul>(.*?)</ul>',html,re.S)[0] print(text_filed) print("===============================") the_text = re.findall('">(.*?)</a>',text_filed,re.S) for every_text in the_text: print(every_text) 执行代码,显示如下 这是第一条 这是第二条 这是第三条 这是第四条 #sub 实现翻页功能 for i in range(7,total_page+1): new_link = re.sub('pageNum=\d+','pageNum=%d' %i,old_url,re.S) print(new_link) 执行代码,显示如下 http://www.jikexueyuan.com/course/web/?pageNum=7 http://www.jikexueyuan.com/course/web/?pageNum=8 http://www.jikexueyuan.com/course/web/?pageNum=9 http://www.jikexueyuan.com/course/web/?pageNum=10 http://www.jikexueyuan.com/course/web/?pageNum=11 http://www.jikexueyuan.com/course/web/?pageNum=12 http://www.jikexueyuan.com/course/web/?pageNum=13
原文地址:http://blog.51cto.com/sdsca/2057772
时间: 2024-11-06 13:43:23