如何设计Crawler(一)实战页面分析

【注】此文章内容完全基于太阁视频硅谷之路44 如何设计Crawler(一)实战页面分析

爬虫的基本结构

  • Information Collection
    • 爬虫
  • Information Retrieval
    • 建立在爬取的数据上用于满足客户需求的应用 (Rank, Search, Recommend)

What is the network process when you are crawling a webpage?

通过『三步握手』机制实现

  • SYN
  • SYN-ACK
  • ACK

    Layers

  • HTTP是应用层的连接,网页就是通过HTTP的协议连接的
  • 传输层是通过TCP或者UDP协议实现的, HTTP是在TCP报文基础上的封装
  • 网络层就是通过IP地址连接的
  • 底层的硬件接口则是网卡

socket(abstract layer)这一层实际并不存在,它是对下层的封装,从此不需要对底层进行直接操作,只需要使用socket的API就能够建立并管理相关的通信

What is HTML?

HTML就是一种用于描述网页内容的标记语言 比如下图右下角的图片在网页端就是通过左上部分的HTML代码表示出来的。 打个比方,HTML就像是一种树状结构,它描述了人体【网页】的各个部位。

Architecture

1. Crawl all the news of a website
  1. 爬取当前页面你想要的内容
    • 通过python的正则表达式
    • 利用python包xPath以及BeautifulSoup这样的parsers来解析内容
  2. 移动到下一页,再次爬取同样的内容,然后往复循环直到爬完想要的数据为止
2. Crawl more websites

每个网站都有自己的crawler, 但是当爬完一个网站后,那个爬虫就被闲置,然后浪费了资源空间

解决方案:设计通用型的crawler

  • 设计Scheduler来调度这些通用型的crawlers
    • 设计taskTable来查询追踪调度的过程并实现爬虫之间的优先级
  • 存储结果到同一个空间【方便管理】

总结

python爬虫易上手

  • python是一个非常简洁的语言,以它为基础的爬虫框架比如scrapy是很好的学习爬虫的工具 socket连接三握手
  • 建立client和server的连接 分析page要动手
  • 如果你再分析下,你能发现下一页的link实际上只有ID在自增,所以你其实不需要list crawler,只需要不停的改变ID就能爬到下一页的数据 taskTable在我手
  • 理解分布式的通用爬虫调度

results matching ""

    No results matching ""