正则表达式
之前在弄那个网页爬虫的时候,,经常就是被正则表达式弄得焦头烂额,最近在学习nlp分词的时候也经常会用到一些有关于正则的一些东西。
啥都不说了,先上图,这张图表达的比较清楚,,但是对于图中完整匹配的字符串那个实例我自己先前理解的也不是很透彻。但后来,通过查看资料,学习视频等等,对这个也差不多理解了12345。。。
看完上图,那么接下来,通过一些实例来体现一下:这是一个测试正则对不对的好地方,需要的话,狂戳链接哦, https://regexr.com/
在这里,我们便可以,正则想怎么写就怎么写啦
另外,这个 http://www.alf.nu/RegexGolf有很多实例可以去训练哦,有的还是有难度哦,需要可以去做做看
总结一下:
- 针对网页的链接获取,一般的网站做的还是比较有规律,获取链接,就是找规律的过程,特别是要注意数字自增或者字母自增。
- 针对网页具体内容的获取,以有问必答网为例,找到里面的问答模块,我们如何抓取 【健康咨询描述】和相应的【医生病情分析】呢,注意到每一个问题对应的网页的内容这两块前后的结构类似,然后利用python的re模块去匹配。相应的python代码如下.
# coding=utf-8
# __author__=Eshter Yuu
#无需言,做自己
'''
依次访问writeHTMLinkToFile.py中最终存储的网页链接文件,并存储相应的网页源码文件
'''
import re
import os as dos
sourcedir='D:/g'
filelist = dos.listdir(sourcedir)
for filename in filelist: #读取每个文件
docdir = sourcedir + "/" + filename #获得每个文件的文件名
#print (docdir)
text = open(docdir).read()
print (text)
#s=r' <div id="article">(.*)</div>'
#s=r' <div id="article">\n([\s\S]*)</p>\n</div>\n'
# s=r' <div id="article">\n([\s\S]*)\n</div>\n'#可用但不好
# s=r'<p>(.*)</p>\n'# 可行\r回车符\n换行符
#同时取<h1></h1>以及<p></p>里面的内容
s1=r'<h2>(.*)</h2>'
s2=r'<br /> (.*)<br /> 指导意见:<br /> (.*)</p>'
pattern1=re.compile(s1)
pattren2=re.compile(s2)
list01=re.findall(pattern1,text)
#print (type(list01))
list02=re.findall(pattren2,text)
f='D:/p'+filename
f=open(f,'w')
for h1 in list01:
f.write(h1)
f.write('\n')
for h2 in list02:
f.write(h2)
f.write('\n')
f.write('\n')
f.close()
- 注明
- 上面的那个图是借鉴别人的哦
- 代码写的比较粗粗哦,,两个循环可能不是太妙,如果有改进的方法欢迎留言,批评指正。