码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-02-07 20:45:39      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:dex   back   准备   html   下标   文档   reg   内容   问题   

上一篇博客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

标签:dex   back   准备   html   下标   文档   reg   内容   问题   

原文地址:https://www.cnblogs.com/blogcyh/p/12271429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!