python爬虫——正则表达式

Posted CCColby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python爬虫——正则表达式相关的知识,希望对你有一定的参考价值。

    在前几篇文章中我们使用了python的urllib模块,做了一些访问网页的工作。现在介绍一个非常强大的工具——正则表达式。在讲述正则的时候,我参考了《精通正则表达式(第三版)     ---Jeffrey E.F.Friedl》这本书,虽然本书的参考语言并没有python,但相通之处颇多,可以细读一部分。

    通常我们在制作爬虫收集数据的时候,需要对服务器传输的数据进行匹配筛选,例如在第二篇文章中下载链家二手房页面的时候,我们只需要房址location和价格price。这时正则表达式就派上用场了。所谓正则表达式,就是一种描述字符串结构模式的形式化表达方法。最初,这套方法用于描述正则文本的,后期发展它的功能变得非常强大。python自从1.5版本起就加入了正则模块re。一方面,正则描述的是一个对象序列,即当今计算机世界的本质数据结构,另一方面,正则有着极强的结构描述能力。基于这两点,我们需要好好学习一下正则表达式。

    这次我们使用另外一个模块——requests,来验证。首先pip install requests,安装上这个package。requests的使用看起来比urllib要简单一些:

 1 #首先我们导入这个包
 2 import requsets
 3 
 4 url="http://www.17jita.com/tab/img/8088.html"
 5 
 6 #GET方法
 7 response=requests.get(url)
 8 #POST方法
 9 response=requests.post(url)
10 
11 #其他
12 response=requests.put(url)
13 response=requests.delete(url)
14 response=requests.head(url)
15 response=requests.options(url)
16 
17 #获取内容
18 html=response.text
19 print(html)

 

    关于requests模块,我们可以在以后使用过程中继续学习。下面我们来看基于正则表达式的re模块,然后可以用re来匹配网页上的内容了。

 

一、正则表达式的规则

 

    正则表达式有以下几个元字符,他们各自都有着特殊的含义:  .   ^  $  *  +  { }  [ ]  \\   |  (  )  。 例如点号(.)表示匹配除换行符以外的任何字符,管道符(|)则有点类似于逻辑或操作。我们可以在  http://tool.oschina.net/uploads/apidocs/jquery/regexp.html    这个网站上查看正则的手册。help(re),我们可以看到这些方法:match,fullmatch,search,split,findall......等。

下面我们来举几个例子。例如我们要对以下这些数据进行匹配“ 1305101765@qq.com   advantage  314159265358 1892673 3.14 little Girl try_your_best 56 123456789@163.com  python3”

 1、匹配advantage,我们用search方法来实现,如果匹配成功它会返回位置。

 

 

可以看到,我们只找到了advantage第一个字母a的位置span=(21,22)。如果要想匹配整个单词呢?

 

 

  可以看到我们match到了advantage。其中 (.)   表示匹配除了换行符体外的任何字符, (+)   表示匹配前面的子表达式一次或者多次。

 

2、匹配邮箱地址

 

 

 

    其中中括号里面的0-9表示0123456789,a-z表示26个字母,{}表示匹配里面的内容一次或多次。这次我们用findall(),他能找出所有满足正则规则的字符串,并返回这些字符串。当然,上面的规则可以继续完善,以至于可以匹配任何的邮箱。

 

    在下一篇我们将解决匹配ip地址的问题,并且从网站上爬取可用ip。

 

以上是关于python爬虫——正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫_案例:使用正则表达式的爬虫

Python爬虫_案例:使用正则表达式的爬虫

python爬虫之正则表达式

python3爬虫之入门和正则表达式

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

Python爬虫入门之正则表达式