每日一练
初听爬虫那是相当高深,所幸的是python语言给予我们一定的便利,比如python自带模块urllib进行网页下载,python第三方库beautiful soup进行网页解析 等等。这篇文章就带你们了解非常简单的爬取网页的过程。
给定一个新浪新闻主页面,如何获取子新闻url并且将其保存到本地呢?
作者:深蓝
编辑:楠楠
训练类型:urllib库
正则表达式
python环境:python3
训练时长:30mins
思路简介
我们很容易想到查看并且下载主页面的源代码,把源代码中对应的子新闻url按照一定的规则抓下来,这个规则需要尽可能多的覆盖到子新闻url ,下面就来看看python是如何实现的。
知识点
◇下载源代码:
Urllib库中的request模块的urlopen()函数。
◇正则匹配:
href="(http://news.sina.com.cn/.*?)" 匹配到的是括号中的链接地址,意思是说链接长这个样子http://news.sina.com.cn/加上任何字符,.*?这三个符号的组合是典型的非贪心算法。
◇存入本地:
request模块下的urlretrieve()函数,本例中的两个参数可以理解为来源(网络)与去向(本地)。
◇URLError异常处理:
hasattr()函数用于判断对象是否包含对应的属性。这里首先对异常的属性进行判断,能够避免出现属性输出报错的现象。
代码展示
importurllib.request
importre
#从data2中找到匹配pat的网址
print(allurl)
fori in range(0,len(allurl)):
#得到所有网址后需要一个循环
try:
print("第"+str(i)+"次爬取")
thisurl=allurl[i]
file="E:/news/"+str(i)+".html"
urllib.request.urlretrieve(thisurl,file)
print("-------成功-------")
except urllib.error.URLError as e:
#以下是通用的捕获异常方式,可以输出异常原因
ifhasattr(e,"code"):
print(e.code)
ifhasattr(e,"reason"):
print(e.reason)
思考
上面的代码看起来虽短,但实现了下载源代码,正则匹配,网络数据存入本地,URLError异常处理功能。复制以上代码到你的python中试试看吧,可以更加直观的看到这些结果哦。
这里引出一些爬虫常见的技术和库供读者在后续进行了解学习,比如python开源爬虫框架scrapy,在 XML 文档中查找信息的技术XPath ,替代urllib2模块的python的第三方requests库,Fiddler抓包分析软件,等等。
本次介绍的是爬取网页,同理,更改规则后可爬取主页面下的图片,来试试吧。
明日问题
如何利用Python计算时间差呢?
领取专属 10元无门槛券
私享最新 技术干货