Your SlideShare is downloading. ×

蜘蛛

2,085

Published on

Published in: Technology, Design
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,085
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
29
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 蜘蛛的进化 作者 : 轩痕
  • 2. 关于我
    • 所属单位 : 足球事业部
    • 兴趣爱好 : 骑行 , 旅游 , 金融
    • 研究方向 : linux django twisted sqlalchemy
    • 邮箱 : [email_address]
  • 3. 关于虎扑
    • 虎扑体育网 (hoopchina.com )是一个垂直综合体育社区, 04 年在美国成立以 NBA 篮球为主,经过几次改版,目前由
    • 篮球 NBA(hoopchina.com)
    • 欧洲足球 (goalhi.com)
    • F1(hellof1.com)
    • 等社区构成,是国内人气最旺的体育综合社区。
    • 日访问量 千万 pv 级
    • alexa.cn 排名 100 左右
  • 4. 什么是蜘蛛
    • 蜘蛛 , 平时也会被大家称为 " 爬虫 ".
    • 主要分为 :
    • 1 通用爬虫
    • 2 聚焦爬虫
    • 聚焦爬虫通常需要解决的问题:
    • (1) 对抓取目标的描述或定义;
    • (2) 对网页或数据的分析与过滤;
    • (3) 对 URL 的搜索策略。
  • 5. 为什么要有蜘蛛
    • 搜索引擎 ( 通用爬虫 )
    • 自身业务需要 ( 去哪儿 , 豆瓣 )
    • 监控竞争对手 ( 当当 , 亚马逊 , 京东 )
  • 6. 豆瓣 :
    • 豆瓣用来抓
    • 取书的价格
    • 制作购书单
  • 7. 去哪儿
    • 自身业务
    • 需要抓取
    • 机票 , 酒店
    • 等价格
  • 8.  
  • 9.  
  • 10. 亦歌
  • 11.
    • 当当 , 京东 , 亚马逊产品价格
  • 12. 选择 ?
    • 我也想写个蜘蛛哇 , 如何开始 ?
      • 选一个能下载网页 + 能处理字符串的语言就行 . 比如 c, c++, python, ruby, perl, php, java 之类的语言都是可以的 .
      • 这么多语言 , 我们如何选择 ? 为什么做这个选择 ?
  • 13. 蜘蛛的进化
    • 1 单线程的蜘蛛
    • 2 简单的多线程蜘蛛 ( 根据需要来产生线程 )
    • 3 具有线程池的蜘蛛 ( 通过死循环来实现固定线程数目 )
    • 4 使用队列来初步实现异步的蜘蛛 ( 这里省略一万字 ..)
    • 5 完全异步的蜘蛛
    • 6 scrapy ( 一个异步的蜘蛛框架 )
    • 7 twisted 自己手工制造 ( 水太深 , 不讲了 ..)
  • 14. 最简单的蜘蛛代码
    • 1 #/usr/bin/env python
    • 2 #encoding:utf-8
    • 3 import urllib2
    • 4 from BeautifulSoup import BeautifulSoup
    • # 下载部分
    • 5 website = urllib2.urlopen('http://www.douban.com')
    • 6 html = website.read()
    • # 解析部分
    • 7 soup = BeautifulSoup(html)
    • 8 title = soup.find('h1').text
    • # 处理结果 , 打印
    • 9 print title
  • 15. 最简单的蜘蛛
    • 这样的蜘蛛有什么利弊呢 ?
    • 如果我们有很多页面需要爬取 , 怎么办 ?
    • 如何让蜘蛛能够更快地行动 , 提高爬取页面的速度 ?
  • 16. 多线程 + 队列 ( 锁 )
    • 蜘蛛最重要的部分就是 队列
    • 根据队列使用程度的不同 , 我们可以得到如下的流程
  • 17.  
  • 18.  
  • 19.  
  • 20.  
  • 21. 为什么要处理异常 , 要如何做 ?
    • 整个程序都要被异常处理的手段所包裹,因为代码要一直跑,不能因为一个小的异常就崩溃了
    • try except 里面的代码要尽量少, 而 try except 要尽量多。下面有我写的第一个脚本跟最后一个脚本的截图对比 :
  • 22. 异常处理方式对比
  • 23.
    • 3 尽量在发生异常的代码附近捕获异常,而不要交给更高一级的异常处理代码来做这个事情,这样有利于定位异常发生的位置,加速调试。
    • 4 异常多的时候,程序在各种情况下进入的分支都要处理妥当。这个在逻辑简单的时候不会是问题,但是一旦在一个页面抓取的数据点多的时候就需要特别小心。
  • 24. 测试 !!!!
    • 先浏览页面 , 保证看到足够数量的页面情况 , 对每种情况作出记录
    • 先写功能部分 , 比如解析 , 数据插入部分 , 保证单线程的稳定
    • 测试 !! 测试 !! 每一个函数都要单独 , 长时间的测试 , 要非常健壮 ,
    • 迭代 !! 迭代 !! 根据单个函数运行的过程中发现的异常 , 修改代码 , 然后继续测试 , 继续修改代码 , 一直迭代 .... 直到感觉差不多了再往下
            • 时间
    • 最最后才是把各部分组合起来的时候 , 这时候加入多线程控制和地址生成部分 .
  • 25. 碰到的问题 , 希望和大家探讨的地方
    • 有没有其他的方式可以让这个爬虫更好维护呢 ?
    • 线程无法退出的问题以及目前的解决办法
    • 入库的时候有没有其他更高效的解决办法 ?
  • 26. 木牛啦 .. 谢谢大家

×