Python语言程序设计之urllib.request抓取页面,并用re解析

Python语言用urllib.request模块抓取页面非常简单,再将抓取的页面内容用re模块解析,找出自己想要的东西。下面就就此方法来抓取网易公开课之《麻省理工学院公开课:算法导论》,解析页面内容,找出所有课程列表和相应的链接地址。

一、用urllib.request模块抓取页面

data = urllib.request.urlopen(url).read().decode()

二、用re模块解析页面内容

rslist = re.compile(pattern).findall(data)

下面就写成完整的示例代码,仅供参考:

import re
import urllib.request

url = "http://open.163.com/special/opencourse/algorithms.html"
data = urllib.request.urlopen(url).read().decode('GBK', "ignore")

pattern = '''<td class="u-ctitle">
                            (.*?)
                            <a href="(.*?)">(.*?)</a>
                                                        <img src=".*?" class="isyy"/>
                                                    </td>'''
rslist = re.compile(pattern).findall(data)

for rs in rslist:
	print(rs[0]+rs[2])
	print(rs[1])

运行结果如下:

[第1集]课程简介及算法分析
http://open.163.com/movie/2010/12/G/F/M6UTT5U0I_M6V2T1JGF.html
[第2集]渐近符号、递归及解法
http://open.163.com/movie/2010/12/2/E/M6UTT5U0I_M6V2T4T2E.html
[第3集]分治法(1)
http://open.163.com/movie/2010/12/8/U/M6UTT5U0I_M6V2T998U.html
[第4集]快排及随机化算法
http://open.163.com/movie/2010/12/S/4/M6UTT5U0I_M6V2T7IS4.html
[第5集]线性时间排序
http://open.163.com/movie/2010/12/7/V/M6UTT5U0I_M6V2TBK7V.html
[第6集]顺序统计、中值
http://open.163.com/movie/2010/12/J/J/M6UTT5U0I_M756SE0JJ.html
[第7集]哈希表
http://open.163.com/movie/2010/12/R/E/M6UTT5U0I_M6V2TG4RE.html
[第8集]全域哈希和完全哈希
http://open.163.com/movie/2010/12/3/A/M6UTT5U0I_M6V2TGI3A.html
[第9集]二叉搜索树
http://open.163.com/movie/2010/12/6/U/M6UTT5U0I_M6V2TGB6U.html
[第10集]平衡搜索树
http://open.163.com/movie/2010/12/9/J/M6UTT5U0I_M6V2TJ49J.html
[第11集]扩充的数据结构、动态有序统计和区间树
http://open.163.com/movie/2010/12/G/0/M6UTT5U0I_M6V2TSIG0.html
[第12集]跳跃表
http://open.163.com/movie/2010/12/7/S/M6UTT5U0I_M6V2TTJ7S.html
[第13集]平摊分析,表的扩增,势能方法
http://open.163.com/movie/2010/12/A/L/M6UTT5U0I_M6V2U1OAL.html
[第14集]竞争性分析,自组织表
http://open.163.com/movie/2010/12/I/2/M6UTT5U0I_M6V2U1BI2.html
[第15集]动态规划,最长公共子序列
http://open.163.com/movie/2010/12/L/4/M6UTT5U0I_M6V2U1HL4.html
[第16集]贪婪算法,最小生成树
http://open.163.com/movie/2010/12/1/S/M6UTT5U0I_M6V2U3R1S.html
[第17集]最短路径算法:Dijkstra算法,广度优先搜索
http://open.163.com/movie/2010/12/E/P/M6UTT5U0I_M6V2U4BEP.html
[第18集]最短路径算法:Bellman和差分约束系统
http://open.163.com/movie/2010/12/4/O/M6UTT5U0I_M6V2U754O.html
[第19集]最短路径算法:点的最短路径
http://open.163.com/movie/2010/12/8/H/M6UTT5U0I_M6V2UDN8H.html
[第20集]高级课题 并行算法(一)
http://open.163.com/movie/2010/12/V/E/M6UTT5U0I_M6V2UDUVE.html
[第21集]高级课题 并行算法(二)
http://open.163.com/movie/2010/12/0/B/M6UTT5U0I_M6V2UGJ0B.html
[第22集]高级课题 缓存参数无关算法
http://open.163.com/movie/2010/12/L/L/M6UTT5U0I_M6V2UIKLL.html
[第23集]缓存无关算法2
http://open.163.com/movie/2010/12/E/1/M6UTT5U0I_M6V2UI5E1.html

抓取到23集,这正是我们所需要的结果,至此大功告成~~~

Leave a Reply

Your email address will not be published. Required fields are marked *