正则表达式 5|学习笔记

简介: 快速学习正则表达式 5

开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践正则表达式 5】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1067/detail/15406


正则表达式 5

 

内容介绍:

一、打开豆瓣图书网站

二、用正则表达式获取信息

三、正则表达式获取结果

 

一、打开豆瓣图书网站

1.首页

首先打开豆瓣图书的网站‘hppt://book.douban.com/’,然后看一下。那这边就成功的加载出了图书馆的网站,可以看到这边是有一些突出的列表的,就是这上面有一些新书速递,然后放上去会出现一些书的信息。

2.代码

(1)、li标签

直接查看一下网页的源代码,能不能审查元素,可以看到这边,点进来之后,它有一个li标签,li标签就是每一个图书的一个区块内容。

(2)、title信息,info 信息,class

里面都有一个超链接,超链接还有一个title信息,下面就是它的书名,然后里面它还有一些info 信息,然后最后面它一个nore-neta这一个class,

(3)、书的信息

然后里面它还有它的书面信息,然后里面就是一个作者信息,然后后面它还有一个year也就是它的出版的时间,

 

二、用正则表达式获取信息

接下来要做的就是用正则表达式,然后把网页信息中的所有的书名信息页,然后它的出版信息之类的获取下来。

1. 获取网页的源代码

首先在这里有一个requests.get方法,它是获取网页的源代码的,在这里用了一个requests库,然后获取了它的text,在这里直接打印出来text,就可以得到整个的网页源代码。

import requests

import re

content = requests.get(‘hppt://book.douban.com/’),text

print(content)

2. 提取网页代码信息

接下来,就需要从这些网页代码里面提取出想要的信息,然后接下来就需要写一个正则表达式的匹配,接下来就用刚才的re.compile方法,然后首先声明这一个pattern,第一个参数就是要传入的正则表达式对象,接下来首先看一下,就是首先把li的标签就是起始标签来写一下,

后面它还有一个cover,为了匹配更加的保险再加一个cover这么一个标志符,后面再看一下网页的源代码,这里它还有一个img,然后外面它是有一层超链接,接下来超链接的,是需要提取的,后面还有一个title,地方也是需要提取的。

所以说,地方就是直接先用.*?,然后省略掉前面乱七八糟的的字符,然后直接写href。然后再加入一个小括号,然后把里面的超链接内容,然后当成一个匹配组,匹配出来,然后再加一个.*?,再加一个title。把title面的内容。提取出来也是有一个小括号来扩括起来,外面都是用一个双引号来引起来,那就证明匹配的是双引号里面的内容。

import requests

import re

content = requests.get(‘hppt://book.douban.com/’),text

print(content)

pattern= re.compile(‘<li.*?cover.*?href=”(.*?)”.*?title=”(.*?)”’)

后面的话,再找一下,匹配一下它作者,作者是属于more-meta标签的,接下来就再加一个标志符,然后。首先匹配的more-meta标签,再往后再把作者,然后再把时间来匹配一下,首先是一个more-meta.*?,是证明已经匹配到了more-meta标签,然后后面再加一个标识符,在这里就直接匹配class=author,然后再把里面的标签里面的内容提取出来。

接下来就直接输入author,然后。再把标签来闭合,然后后面标签里面的内容就是需要拿到的内容,然后再把span标签闭合一下,这样的话,就可以拿到磁盘标签里面内容了。

import requests

import re

content = requests.get(‘hppt://book.douban.com/’),text

print(content)

pattern= re.compile(‘<li.*?cover.*?href=”(.*?)”.*?title=”(.*?)”more-meta.*?author”>(.*?)</span>’)

然后接下来再把时间来获取一下。也是把year再写入的正则表达式里面,然后要拿到的就是span里面内容就是再加一个.*?,然后再加一个year,然后再把做标签闭合一下,然后直接写入一个括号,然后.*?,然后再加一个线,闭合一下,这样的话,就把整个的一个正则的表达式的匹配就写完了。

import requests

import re

content = requests.get(‘hppt://book.douban.com/’),text

print(content)

pattern= re.compile(‘<li.*?cover.*?href=”(.*?)”.*?title=”(.*?)”more-meta.*?author”>(.*?)</span>.*?year”>(.*?)</span>’)

最后,可以再把li标签来闭合一下,可以再继续写.*?。然后再li标签闭合一下,整个的式子就已经写完了。,第二个参数可以传入批评模式re.s,因为它有很多换行符,所以需要用点来代替任意的字符。接下来就用re.findall方法,会把正则表达式对象,然后再把要匹配的内容,然后传过来,匹配结果就是想要的内容了,

import requests

import re

content = requests.get(‘hppt://book.douban.com/’),text

print(content)

pattern= re.compile(‘<li.*?cover.*?href=”(.*?)”.*?title=”(.*?)”more-meta.*?author”>(.*?)</span>.*?year”>(.*?)</span>.*?</||>,re.S’)

results = re.findall(pattern,content)

print(results)


三、正则表达式获取结果

1.输出结果

看一下result。那可以看到这边的正常的输出了一些匹配内容。它是一个列表的形式,然后每个列表里面它是由。它列表里面就包含了和元组,每个元组它是包含了超链接,然后书名,然后它作者还有它的时间,都没有什么问题,接下来进行一下便利,那for results,然后接下来链接,名称,然后再把作者,然后出版时间,然后依次来进行复制。用逗号来分隔,这样的话,它会依次的对它进行复制,然后再把urf,name,date依次输出出来。

import re

content = requests.get(‘hppt://book.douban.com/’),text

print(content)

pattern= re.compile(‘<li.*?cover.*?href=”(.*?)”.*?title=”(.*?)”more-meta.*?author”>(.*?)</span>.*?year”>(.*?)</span>.*?</||>,re.S’)

results = re.findall(pattern,content)

print(results)

for result in results:

url, name, author, date = result

print(url, name, author, date)

看一下数据,结果是怎样的,下面的话,就可以看到在这里有一个正常的输出,就把原组里的信息依次都拿出来,然后进行了一些输出。

2.删除空白字符

可以看到,原先的这些内容里面,是有一些换行符的,那换行符可以完全strip这么一个方法来把它去掉,但是在这里也可以用re.sub方法,为了练习re.sub方法,可以用re.sub方法来代替一下。re.sub方法第一个参数,可以把换行符传过来,换行符可以用\s代替,其实它也是一个空白字符。

第二个参数,那就直接传过一个空层串,第三个参数,就是传入原字符串,就是author,还有date,date是也是需要提取的,因为,author还有date,它是从    里面出来的,它本身就带有换行符,所以说要针对这两个内容进行去除,

import re

content = requests.get(‘hppt://book.douban.com/’),text

print(content)

pattern= re.compile(‘<li.*?cover.*?href=”(.*?)”.*?title=”(.*?)”more-meta.*?author”>(.*?)</span>.*?year”>(.*?)</span>.*?</||>,re.S’)

results = re.findall(pattern,content)

print(results)

for result in results:

url, name, author, date = result

author = re.sub(‘\s’,”,author)

date = re.sub(‘\s’,”,date)

print(url, name, author, date)

那可以看到这次再打印输出结果里,那就没有换行符了,看到结果也是非常清晰,第一个就是url,后面都是一些相应的内容。把原先的results注释一下。重新运行一下,可以看到这样的话,就已经把所有的链接,书名,作者还有它的出版时间就已经体现出来了。

以上就通过findall,还有sub方法,然后实现了豆瓣读书的爬取,可以感受一下这几个方法的一些相关的用法,关于前面的这些常见的学习模式,也是建议大家能够比较熟练的记住。如果没有记住的话,也没有关系,可以查一下这些相关的一些操作,如果用的不太用得多的话,就熟能生巧。

相关文章
java202303java学习笔记第二十七天-正则表达式之3
java202303java学习笔记第二十七天-正则表达式之3
43 0
java202303java学习笔记第二十八天-正则表达式基本练习2
java202303java学习笔记第二十八天-正则表达式基本练习2
67 0
java202303java学习笔记第二十八天-正则表达式基本练习1
java202303java学习笔记第二十八天-正则表达式基本练习1
62 0
java202303java学习笔记第二十八天-正则表达式基本练习3 原
java202303java学习笔记第二十八天-正则表达式基本练习3 原
51 0
java202303java学习笔记第二十七天-正则表达式基本练习1
java202303java学习笔记第二十七天-正则表达式基本练习1
68 0
java202303java学习笔记第二十七天-正则表达式之2
java202303java学习笔记第二十七天-正则表达式之2
61 0
java202303java学习笔记第二十七天-正则表达式之1
java202303java学习笔记第二十七天-正则表达式之1
60 0
java202303java学习笔记第二十七天-正则表达式之4
java202303java学习笔记第二十七天-正则表达式之4
40 0
java202303java学习笔记第二十七天-正则表达式之3
java202303java学习笔记第二十七天-正则表达式之3
42 0
|
开发者 Python
正则表达式4|学习笔记
快速学习正则表达式4
正则表达式4|学习笔记