在爬取网页信息时,我们不妨会用到Python正则表达式。之前一直没有太明白关于正则表达式匹配分组的问题,今天终于搞清楚了,所以特意写一下让自己印象深刻。
import requests
myPage = requests.get(url).content.decode("gbk")
通过requests我们在网页得到了这样的html代码
我想对下面这一句通过正则表达式进行提取它的信息,类似于"http://news.163.com/special/rank_m/"这样的网页
使用正则表达式
mypage_Info = re.findall(r'<div class="titleBar" id=".*?"><h2>.*?</h2><div class="more"><a href="(.*?)">.*?</a></div></div>', myPage, re.S)
请注意上式的圆括号!
此时只有一个圆括号,最后我们只得到了一个匹配分组
可以看到得到了一个元素仅仅为网址的list,这是因为刚刚括号括到的地方只有网址,代表我们只有一个匹配分组。
这时我们将代码改写为
mypage_Info = re.findall(r'<div class="titleBar" id=".*?"><h2>(.*?)</h2><div class="more"><a href="(.*?)">.*?</a></div></div>', myPage, re.S)
仔细看的话会发现我在<h2>后面加上了括号,我在“移动”这样的文字出现的地方,建立了一个分组。
得到的结果是
可以看到现在我们得到的list,内部的元素已经变为了一个tuple。通过这个例子,应该就能说明这个正则表达式中这个“圆括号”的作用了。