龙空技术网

python之正则表达式进阶——从网页摘取信息

皛心 535

前言:

此刻同学们对“正则表达式解析网页”大概比较注意,咱们都需要剖析一些“正则表达式解析网页”的相关内容。那么小编也在网络上汇集了一些关于“正则表达式解析网页””的相关内容,希望兄弟们能喜欢,咱们快快来了解一下吧!

经过之前一段时间关于正则表达式和re模块的学习和梳理,现在尝试从复杂网页中爬取信息。

学习从网页中摘取信息

确认数据源

练习从网页爬取数据时,为了不触发网站的反爬机制,建议打开网页另存为html文件。我从某网站保存了一页关于房产信息的网页,尝试从中爬取信息。

然后用notepad++打开该文件,看看文件内容。

编写正则表达式

是不是感觉有点无从下手?别慌,慢慢来。通过对比网页和网页代码我们确认信息特征。

房产名称

急降60万  急卖全款客户来 宝山二村好位置

复制该信息,到html文件中通过ctrl+F查找该信息,然后认真查看“房产名称”前后的字符特征:

前面的字符特征:

;</span>"  >

后面的字符特征:

 

现在对照房产名称前后的字符特征编写正则表达式,同时给“房产名称”进行分组命名(?P.*?):

;</span>"  >(?P<name>.*?) 

注意: .*?在爬取网页时经常会用到,表示匹配任意内容任意数量直到遇到后面的字符特征结束)

房型

现在再观察下一项“房型”信息前后的字符特征:

前面的字符特征:

span></span>

后面的字符特征:

<span class="html-tag">

如法炮制,提取“房型”信息并进行分组命名(?P.*?):

span></span>(?P<type>.*?)<span class="html-tag">

注意: 在房产名称和房型之间有大段网页代码,我们可以写.*?对应该段代码表示跳过。

面积

现在再观察下一项“面积”信息前后的字符特征:

前面的字符特征:

<span class="html-tag"><span></span>

后面的字符特征:

 <span

如法炮制,提取“面积”信息并进行分组命名(?P.*?):

<span class="html-tag"><span></span>(?P<area>.*?) <span

总价

现在就剩最后一项“总价”信息,继续查找该信息前后的字符特征:

前面的字符特征:

</span><span class="html-tag"><b></span>

后面的字符特征:

<span class="html-tag"><

如法炮制,提取“总价”信息并进行分组命名(?P.*?):

</span><span class="html-tag"><b></span>(?P<price>.*?)<span class="html-tag"><

现在提取网页数据四项信息的正则表达式均已写好,注意每一项信息之间间隔了很多的网页代码,我们可以用.*?对应该段代码表示跳过。让我们现在把4段信息连起来,写出完整的正则表达式:

rex = ';</span>"  >(?P<name>.*?) .*?span></span>(?P<type>.*?)<span class="html-tag">.*?<span class="html-tag"><span></span>(?P<area>.*?) <span.*?</span><span class="html-tag"><b></span>(?P<price>.*?)<span class="html-tag"><'
编写代码
import rewith open('房屋信息.html',encoding='utf8') as f:    text = f.read()rex = ';</span>"  >(?P<name>.*?) .*?span></span>(?P<type>.*?)<span class="html-tag">.*?<span class="html-tag"><span></span>(?P<area>.*?) <span.*?</span><span class="html-tag"><b></span>(?P<price>.*?)<span class="html-tag"><'ret = re.finditer(rex, text, re.S)j = 1for i in ret:    print(j,i.group('name'), i.group('type'), i.group('area'), i.group('price'))    j +=1
输出内容

最终输出内容有120项,信息式样如下:

多多做类似的练习,熟练掌握正则表达式,爬虫入门不难。

希望有能帮到学正则表达式的朋友们,加油啦!

另外数据源和网站信息不便透露,避免惹麻烦。授人以鱼不如授人以渔,我已将爬虫时写正则表达式的方法和思路完整地一步步列了出来,有心要学的朋友请按照上述方法自行多多练习呀!

标签: #正则表达式解析网页