python爬虫教程-第一个爬虫

第一天: 环境及第一个爬虫


为什么要学习爬虫?

研究搜索引擎的工作原理

爬虫的作用?

爬你喜欢的网站内容, 如比MM的图片, 喜欢的小说, 你喜欢的电影等等, 只要是在网络上存在的都能爬下来为你所用, 是不是很神奇? 下面就让我们一起来学习python爬虫吧

准备工作

  • 系统win10 X64
  • python 2.7
  • 编辑工具Atom
  • 控制台GitBash 可以根据个人偏好, 搭配同类型的工具即可

第一天: 如何入手?

大多数网站都会定义robots.txt文件, 这样可以让爬虫了解爬取该网站时存在哪些限制, 这些限制仅仅作为建议给出, 你可以分析该文件, 制定爬行策略, 但也可以忽略它.关于robots.txt协议的更多信息可以参见:http://www.robotstxt.org

估算网站的大小

为什么要估算网站的大小, 如果我们的网站只有几百个url, 效率并没有那么重要, 但是如果网站拥有数万个网页, 使用串行下载估计要很多天才能完成, 所有有必要分析网站的大小, 制定不同的策略
估算网站大小的方法就是查检google或baidu爬虫的结果, 因为baidu或google很可能已经爬取过我们感兴趣的网站了, 我们可以在搜索框输入:site关键字过滤域名结果, 从而了解网站的大致大小, 例如:site:tubedown.cn搜索结果如图:
img
从上图我们可以看到, 该网站很简单只有三个页面, 和网站中真实的页面数量是一至的

第一个爬虫

爬取网站的常见方法有三种
  • 爬取网站地图
  • 遍历每个网页的数据库ID
  • 跟踪网页链接
    选择哪一种方法取决于目标网站的结构, 今天我们先来学习一下如何下载网页, 之后的课程中我们再讲解其它方法

下载网页

要想爬网页, 我们首先要把网页下载下来, 这里我们用python的urllib2模块下载url


#coding:utf8

import urllib2

def download(url):
  return urllib2.urlopen(url).read()

当传入url参数时, 该函数会下载页面并返回html, 不过, 这个代码有一个问题, 当下载网页时, 如果请求的页面不存在, urllib2会产生异常, 然后退出脚本的运行, 下面是一个带异常处理的版本

#coding:utf8

import urllib2

def download(url):
  print 'downloading:', url
  try:
    html = urllib2.urlopen(url).read()
  except urllib2.URLError as e:
    print 'download error:', e.reason
    html = None
  return html

现在, 如果产生URLError异常, 函数将返回None, 但是网络环境瞬息万变, 比如过春节的时候, 想在网上看春晚那是需要极大的耐心的, 所以下载时有可能会出现错误, 有些错误是临时性的, 比如服务器过载时返回的503 Service Unvailable错误, 对于此类错误, 我们可以尝试重新下载, 当然, 不需要对所有错误都尝试重新下载, 如果服务器返回的是404 Not Found这种错误, 说明网页不存在, 这样重试就没有意义, 一般来讲4XX错误发生在请求存在问题时, 5XX错误发生在服务端, 重试下载即可, 下面是支持重试下载的代码

#coding:utf8
import urllib2

def download(url, num_retries=2):
  print 'downloading:', url
  try:
    html = urllib2.urlopen(url).read().decode('utf8', 'ignore').encode('gbk', 'ignore')
  except urllib2.URLError as e:
    print 'download error:', e.reason
    html = None
    if num_retries > 0:
      if hasattr(e, 'code') and 500 <= e.code < 600:
        return download(url, unm_retries-1)
  return html

下面我们来运行脚本, 示例网站为:http://tubedown.cn, 代码如下

if __name__ == '__main__':
  html = download('http://tubedown.cn', 2)
  print html

运行结果下如图:
img

今天就到这里, 如果有不明白的地方, 就留言到评论里吧, 博主会尽早回答你的问题

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值