不要以为搜集数据就是写一组程序,然后让它跑起来这么简单,这里面有很多门道。
相关知识
了解一些不与搜索引擎直接相关的东西很有必要:
I.通信协议(包括http、ftp、smtp等等),在搜索之前,我们需要与服务器建立连接(东西都在服务器上嘛),并保证我们发送的请求是服务器能够识别的,具体什么协议我们可以暂时不管,但我们必须有这个意识
II.在写爬取程序之前,我们需要确定和优化处理数据的数据结构,因为这也关系着你的爬虫程序应该采用哪种编程语言和哪种编程思想
信息搜集的过程
接下来,我们从爬虫、服务器连接、通信3各方面来看看搜集是怎样一个过程:
爬虫(Spider Crawl Robot),搜索引擎都是有多个爬虫的,即多个程序,不过我们不关心这个,我们关心的是,他大概怎么运作的,要包含哪些东西。
爬虫实质上就是在数据集合中找到各种数据类型的URL集合,包括(html、PDF、word、PPT...),然后进行解析。通常情况下,一个爬虫需要包含这样几个部分——
I.URL类,去匹配URL集合。这里必不可免要用到(包含)正则表达式(解析数据字符串),当然,编程语言是多种多样的,PHP、Python、Java都行,自行选择
II.URL容器,存储已经解析过的网页和待解析的网页
III.URL解析器,从各大网页中国提炼出价值信息
那这么多的网页,应该怎样去爬呢?这涉及到网页的权重问题(重要性问题) ,其实,web信息不仅在数量上,在结构上也像一个海洋(如下图),在爬虫出发之前,它并不知道哪个网页更重要,所以我们选择目录较浅的表面层次信息,用户更容易浏览到,比如各大网站的首页,这样是比较合理的。这反映到数据结构上,即广度优先,所以说铺垫很重要。
当然,在面对巨大的信息量时,任何程序设计都是一项复杂的工程,我并没有讲robot协议,爬虫与网站间应该如何建立友好合作关系,因为一两句说不清楚。
建立服务器连接。原因很好懂,当你的爬虫匹配到一批URL时,你自然要解析它,所以你要访问网页原始地址,自然,客户端与服务器端要建立连接,通用http协议,访问到网站域名,然后解析域名,映射到一个准确的IP地址,进行读取操作。
通信请求(发送与接收数据)连接建立成功后,根据http协议,我们会构造请求体发送给服务器,这里我们引入Socket通信方法(见下图)
Socket提供了通信的端口,这样就不会产生"碰撞"现象。服务器在接收到收集端信息之后,会先返回一个头信息(下图)
针对http头信息,我们将进行判断是否获取该网页,如果获取,将会返回一个http头信息,其中包含文件类型、发送时间之类的信息,然后会返回http body 信息,包含网页的全部内容,根据需求将返回的内容存储下来,否则取消该请求,执行下一个请求。
梳理一下这个过程就是:
爬取目标URL-访问URL-申请获取相关页面内容-返回页面内容-存储
写在后面
写的不好,但我还是争取把这一系列的文章写完吧,下一节讲一讲对搜集的信息如何处理-信息处理模块,喜欢的还请支持一下:)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。