Python从零开始写爬虫-2 使用正则表达式解析HTML

Posted blogcyh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python从零开始写爬虫-2 使用正则表达式解析HTML相关的知识,希望对你有一定的参考价值。

上一篇博客Python从零开始写爬虫-1 使用Python发送http请求并获得网页源代码中我们已经学习到如何从网站上获取html的源码, 那么今天我们就来学习如何使用正则表达式来解析HTML.同样以Python的Api文档为例.

正则表达式:

又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。(从百度上复制过来的)

看这篇文章没有正则表达式的基础也可以看, 当然有最好, 下面我会介绍如何在Python中使用正则表达式,

Python中的正则表达式

python中的正则表达式, 通过 re 进行实现, 首先导入模块 re.

import re

其具体用法参见参考文档. 我们在这个爬虫需要用大他的两个方法

re.search(patten, text):

该方法通过返回text中符合patten的第一个结果, 这个方法,主要为后面获取小说的正文做准备.下面我以获取text中<div>...</div>的内容,为例, 讲解这个命令.

r = re.search(<div>.*?</div>, <a href=’www.baidu.com>百度首页</a><div>我正在学习正则表达式</div>)

re.search()的结果会保存在r.group中

print(r.group())

可以看到以下结果:

技术图片

我们已经正确的获得div里的内容, 但是有一个问题为什么连便签内容也获得了, 有什么办法可以捕获的标签吗?

整个表达式中一般使用()来划分group, 我们子需要将需要获得内容用括号括起来, 然后更具下标获取就可以了.

r = re.search(<div>(.*?)</div>, <a href=’www.baidu.com>百度首页</a><div>我正在学习正则表达式</div>)

技术图片

可以看出, group()默认是输入group(0), 而group(1)输入第一括号对应的内容, 以此类推.

如果text,没有匹配的结果, 那么就会返回 None

r = re.search(<div>(.*?)</div>没有结果, <a href=’www.baidu.com>百度首页</a><div>我正在学习正则表达式</div>)

技术图片

re.findAll(p, text):

该命令主要是为了后面获取小说章节的链接以及标题做准备.假设 :

text = <a href="www.baidu.com">百度首页</a><div>我正在学习正则表达式</div><a href="www.youku.com">优酷首页</a>

我们现在需要获取text中所有链接的目标地址以及其包含的文本. 我们可以通过:

r = re.findall(<a href="(.*?)">(.*?)</a>, text)
for i in r: 
    print(i[0], i[1])

就可以后的以下结果:

 技术图片

到这里, 该爬虫可能会用到的两个正则表达式命令已经学完了.在下一章, 我们将学习如何获得需要下载的目录

 

以上是关于Python从零开始写爬虫-2 使用正则表达式解析HTML的主要内容,如果未能解决你的问题,请参考以下文章

从零开始学Python爬虫(四):正则表达式

用python写网络爬虫 -从零开始 2 编写网站地图爬虫

Python 爬虫 解析库的使用 --- Beautiful Soup

python爬虫之解析库正则表达式

从零开始写Python爬虫 --- 2.1 Scrapy 爬虫框架的安装与基本介绍

用python写网络爬虫 -从零开始 3 编写ID遍历爬虫