python编写知乎爬虫实践

发表于:2018-7-04 10:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:cpselvis    来源:博客园

  爬虫的基本流程
   
  网络爬虫的基本工作流程如下:
  1.首先选取一部分精心挑选的种子URL
  2.将种子URL加入任务队列
  3.从待抓取URL队列中取出待抓取的URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。
  4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。
  5.解析下载下来的网页,将需要的数据解析出来。
  6.数据持久话,保存至数据库中。
  爬虫的抓取策略
  在爬虫系统中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面。而决定这些URL排列顺序的方法,叫做抓取策略。下面重点介绍几种常见的抓取策略:
    
  深度优先策略(DFS)
  深度优先策略是指爬虫从某个URL开始,一个链接一个链接的爬取下去,直到处理完了某个链接所在的所有线路,才切换到其它的线路。
  此时抓取顺序为:A -> B -> C -> D -> E -> F -> G -> H -> I -> J
  广度优先策略(BFS)
  宽度优先遍历策略的基本思路是,将新下载网页中发现的链接直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。
  此时抓取顺序为:A -> B -> E -> G -> H -> I -> C -> F -> J -> D
  了解了爬虫的工作流程和爬取策略后,就可以动手实现一个爬虫了!那么在python里怎么实现呢?
  技术
  1.requests 人性化的请求发送
  2.Bloom Filter 布隆过滤器,用于判重
  3.XPath 解析HTML内容
  4.murmurhash
  5.Anti crawler strategy 反爬虫策略
  6.MySQL 用户数据存储
  基本实现
  下面是一个伪代码
  import Queue
  initial_page = "https://www.zhihu.com/people/gaoming623"
  url_queue = Queue.Queue()
  seen = set()
  seen.insert(initial_page)
  url_queue.put(initial_page)
  while(True): #一直进行
  if url_queue.size()>0:
  current_url = url_queue.get()              #拿出队例中第一个的url
  store(current_url)                         #把这个url代表的网页存储好
  for next_url in extract_urls(current_url): #提取把这个url里链向的url
  if next_url not in seen:
  seen.put(next_url)
  url_queue.put(next_url)
  else:
  break

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号