什么?python爬虫这么简单?

每日一练

初听爬虫那是相当高深,所幸的是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计算时间差呢?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180524G1MXRM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券