Python-15:爬虫之正则表达式应用举例
首先,我们从最简单的使用python来读取本地文件中的文本内容来开始
1、在本地新建一个html文档,内容如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>这是自定义html网页的一个标题</title> </head> <body> <a href="https://www.cnblogs.com/jiyongxin">跳转到我的博客</a> <ul> <li>这是列表第一项</li> <li>这是列表第二项</li> <li>这是列表第三项</li> <li>这是列表第四项</li> </ul> </body> </html>
2、在与html文件相同目录下创建我们的Python文件,内容如下
#coding:utf-8 #导入re库文件#import re #以r(read)的方式打开我们自己编写的html文档 myFile=open('list.html','r') #从myFile文件中读取内容保存到html变量之中 html=myFile.read() #将html打印出来 print html
3、输出结果为
这样我们就使用Python简单的一句代码将HTML文件读取出来了,那么,我们想要得到HTML中特定的信息就需要使用到我们的正则表达式
接下来,我们读取HTML文件的标题
#coding:utf-8 #导入re库文件 import re #以r(read)的方式打开我们自己编写的html文档 myFile=open('list.html','r') #从myFile文件中读取内容保存到html变量之中 html=myFile.read() #从html变量中找到符合正则表达式<title>(.*?)</title>的内容,使用search为只找第一个,re.S是换行符不影响正常配对 title=re.search("<title>(.*?)</title>",html,re.S).group(1) #将查找到的标题打印出来 print title
输出结果为
使用爬虫来扒取自定义HTML文件上的所有超链接
我们既然要扒取所有的超链接,那么我们在html文件中再加入几个a标签,更改后的html文件内容如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>这是自定义html网页的一个标题</title> </head> <body> <a href="https://www.cnblogs.com/jiyongxin">跳转到我的博客</a> <ul> <li>这是列表第一项</li> <li>这是列表第二项</li> <li>这是列表第三项</li> <li>这是列表第四项</li> </ul> <a href="https://www.baidu.com">跳转到百度</a> <a href="https://www.zhihu.com">跳转到知乎</a> </body>
Python代码如下
#coding:utf-8 #导入re库文件 import re #以r(read)的方式打开我们自己编写的html文档 myFile=open('list.html','r') #从myFile文件中读取内容保存到html变量之中 html=myFile.read() # 从html中查找符合相应正则表达式的代码 a=re.findall('href="(.*?)"',html,re.S) #将得到的内容依次输出 for each in a: print each
输出结果为:
抓取自定义文件中的列表中的内容
当我们要抓取li中的内容时,可以使用>(.*?)</来抓取,但是整个文档中有很多这样的地方,这个时候我们就需要使用先抓大后抓小的原则,即,现将ul中的内容从HTML中抓取出来,再从ul中抓取li的内容
不使用先抓大再抓小的代码:
#coding:utf-8 #导入re库文件 import re #以r(read)的方式打开我们自己编写的html文档 myFile=open('list.html','r') #从myFile文件中读取内容保存到html变量之中 html=myFile.read() # 从html中查找符合相应正则表达式的代码 a=re.findall('>(.*?)</',html,re.S) #将得到的内容依次输出 for each in a: print each
输出结果:
先抓大再抓小的代码
#coding:utf-8 #导入re库文件 import re #以r(read)的方式打开我们自己编写的html文档 myFile=open('list.html','r') #从myFile文件中读取内容保存到html变量之中 html=myFile.read() # 从html中查找符合相应正则表达式的代码 ul=re.findall('<ul>(.*?)</ul>',html,re.S) #在ul中查找li中的内容 for eachUl in ul: lis=re.findall("<li>(.*?)</li>",eachUl,re.S) #将得到的内容依次输出 for li in lis: print li
输出结果为:
使用sub来实现翻页
当我们在扒取网页的时候,总会遇到有很多信息需要通过翻页来进行更多检索的,那么我们就在本地先来模拟一下在爬虫的过程中是怎么来实现网页翻页的
代码如下:
#coding:utf-8 #导入re库文件 import re #我的博客的地址 my_blog="https://www.cnblogs.com/jiyongxin?pageNum=1" #假设我的博客总共有10页 total_page=11 for i in range(2,total_page): new_link=re.sub('pageNum=\d+','pageNum=%d'%i,my_blog,re.S) print new_link
运行结果如下: