自学Python笔记:爬一份资料来分析(2)

昨天有朋友给我留言说你搞什么正则啊,爬虫有方便的库你不用,然后介绍了requests、pyquery、Beautiful Soup和Lxml。关键词太多啊,需要获取的信息太多,看来想学好真的要静下心来研究,感谢关注和帮助我的朋友们~

大致看了下正则、pyquery、Beautiful Soup和Lxml网上的对比,感觉各有各的好,不过无论哪种正则是基础,就算不做爬虫学学还是非常必要的。

正则表达式

link_list =re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')" ,text)

昨天最后尝试了这样一句,也看到他的方便,今天再复习一下,首先看一下下面最基本的元字符的说明,每个元字符怎么使用请自行搜索学习。

元字符说明
.代表任意字符
\
[ ]匹配内部的任一字符或子表达式
[^]对字符集和取非
-定义一个区间
\对下一字符取非(通常是普通变特殊,特殊变普通)
*匹配前面的字符或者子表达式0次或多次
*?惰性匹配上一个
+匹配前一个字符或子表达式一次或多次
+?惰性匹配上一个
?匹配前一个字符或子表达式0次或1次重复
{n}匹配前一个字符或子表达式
{m,n}匹配前一个字符或子表达式至少m次至多n次
{n,}匹配前一个字符或者子表达式至少n次
{n,}?前一个的惰性匹配
^匹配字符串的开头
\A匹配字符串开头
$匹配字符串结束
[\b]退格字符
\c匹配一个控制字符
\d匹配任意数字
\D匹配数字以外的字符
\t匹配制表符
\w匹配任意数字字母下划线
\W不匹配数字字母下划线

上面的正则表达式可以拆分成下面两部分,‘|’ 是或规则。

(?<=href=\").+?(?=\")

(?<=href=\').+?(?=\')

Python 提供一个简便的前向界定和后向界定功能,或者叫前导指定和跟从指定功能。它们是:

‘(?<=…)’ 前向界定

括号中 ’…’ 代表你希望匹配的字符串的前面应该出现的字符串。

‘(?=…)’ 后向界定

括号中的 ’…’ 代表你希望匹配的字符串后面应该出现的字符串。

这样看就好理解了,

(?<=href=\')” 是前向界定,想匹配我需要的字符前面是“href='”

(?=\')”是后向界定,想匹配我需要的字符后面是“'’”

.+?” 中,“.”匹配除换行符 ’/n’ 外的所有字符,“+?”是惰性匹配上一个,大致意思是只要匹配就返回了,不会再接着往下找了。

以下面链接仔细想一下就搞明白了。

<a href='http://.../college/c/10001.shtml' target='_blank'>

<a href="http://.../college/c/10001.shtml" target='_blank'>

接下来对网页进行分析后用正则进行内容匹配提取信息,先看一下网页结构,注意我标红需要分段截取和标绿需要提取的信息部分。

自学Python笔记:爬一份资料来分析(2)

内容分析

自学Python笔记:爬一份资料来分析(2)

代码

这里简单对正则表达式稍作说明:

re.compile该函数根据包含的正则表达式的字符串创建模式对象,可以实现更有效率的匹配。

re.findall 方法能够以列表的形式返回能匹配的子串。

.*? 是一个固定的搭配,表示使用非贪婪模式进行匹配,这个组合经常用到。

(.*?)代表一个分组,在上面正则表达式中我们匹配了八个分组,在后面的遍历item和itema中,item[0]就代表第一个(.*?)所指代的内容,以此类推。

re.S 标志代表在匹配时为点任意匹配模式,点 . 也可以代表换行符。

通过上面代码我们就获取了学校详细介绍链接,学校名称,归属地等信息,见下图。

自学Python笔记:爬一份资料来分析(2)

需要抓取的内容

自学Python笔记:爬一份资料来分析(2)

抓取的结果

分页问题

自学Python笔记:爬一份资料来分析(2)

需要抓取的页面有分页,我们分析了下分页方式比较固定,观察了下主要是get数据中page值的变化,这里采用一个较为固定的方法获取。用format()和for循环来实现把分页地址存放进列表中。range(1,5)是5个页面的地址。

urls = ['http://.../college/collegelist/view?provid=&typeid=&pro=is985&tab=&page={}'.format(str(i)) for i in range(1,5)]

根据上述情况及分析,我们整理一下代码如下:

自学Python笔记:爬一份资料来分析(2)

完整代码

最后开一下运行结果:

自学Python笔记:爬一份资料来分析(2)

运行结果

基本满足要求,剩下的就是将提取的数据保存为excel或其他需要的格式进行数据分析了。

如果您有更好的建议或在学习中遇到了问题请留言交流,相信我们一定会学有所获的~

关注我,带给您更多有趣有意义的信息~


鲜花

握手

雷人

路过

鸡蛋
用心服务创业者
0851-88611148
周一至周五 9:00-18:00
意见反馈:admin@0851life.com

扫一扫关注我们

Powered by 童码少儿编程 X3.4© 2001-2013 0851life Inc.|网站地图