作家
登录

pyspider爬虫教程 (2):AJAX和HTTP

作者: 来源: 2017-05-15 09:52:38 阅读 我要评论

在上一篇教程《pyspider 爬虫教程 (1):HTML 和 CSS 选择》中,我们应用 self.crawl API 抓取豆瓣片子的 HTML 内容,并应用 CSS 选择器解析了一些内容。不过,如今的网站经由过程应用 AJAX 等技巧,在你与办事器交互的同时,不消从新加载全部页面。然则,这些交互手段,让抓取变得稍微难了一些:你会发明,这些网页在抓回来后,和浏览器中的并不雷同。你须要的信息并不在返回 HTML 代码中。

在这一篇教程中,我们会评论辩论这些技巧 和 抓取他们的办法。

AJAX

AJAX 是 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)的缩写。AJAX 经由过程应用原有的 web 标准组件,实现了在不从新加载全部页面的情况下,与办事器进行数据交互。例如在新浪微博中,你可以展开一条微博的评论,而不须要从新加载,或者打开一个新的页面。然则这些内容并不是一开端就在页面中的(如许页面就太大年夜了),而是在你点击的时刻被加载进来的。这就导致了你抓取这个页面的时刻,并不克不及获得这些评论信息(因为你没有『展开』)。

固然 Cookie 只是 HTTP Header 中的一个,然则因为异常重要,然则拿出来说一下。Cookie 被 HTTP 请求用来区分、追踪用户的身份,当你在一个网站登录的时刻,就是经由过程写入 Cookie 字段来记录登录状况的。

AJAX 的一种常见用法是应用 AJAX 加载 JSON 数据,然后在浏览器端衬着。如不雅能直接抓取到 JSON 数据,会比 HTML 更轻易解析。

  1. class Handler(BaseHandler): 
  2.  
  3.     def on_start(self): 
  4.  
  5.         self.crawl('http://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0'
  6.  
  7.                    callback=self.json_parser) 
  8.  
  9.   
  10.  
  11.     def json_parser(self, response): 
  12.  
  13.         return [{ 
  14.  
  15.             "title": x['title'], 
  16.  
  17.             "rate": x['rate'], 
  18.  
  19.             "url": x['url'
  20.  
  21.         } for x in response.json['subjects']]  

【编辑推荐】

  1. 经由过程 Node.js, Express.js 实现 HTTP/2 Server Push
  2. 用Python实现每秒处理120万次HTTP请求
  3. 深刻懂得HTTPS道理、过程与实践
  4. 一文读懂 HTTP/2 特点
  5. pyspider爬虫教程(1):HTML和CSS选择
【义务编辑:枯木 TEL:(010)68476606】

HTTP Headers

AJAX 一般是经由过程 XMLHttpRequest 对象接口发送请求的,XMLHttpRequest 一般被缩写为 XHR。点击收集面板上漏斗形的过滤按钮,过滤出 XHR 请求。挨个查看每个请求,经由过程拜访路径和预览,找到包含信息的请求:http://movie.douban.com/j/searchX61Xsubjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0

当一个网站应用了 AJAX 的时刻,除了用 pyspider 抓取到的页面和浏览器看到的不合以外。你在浏览器中打开如许的页面,或者点击『展开』的时刻,经常会看到『加载中』或者类似的搁笔/动画。例如,当你测验测验抓取:http://movie.douban.com/explore

你会发明片子是『载入中…』

找到真实的请求

因为 AJAX 实际上也是经由过程 HTTP 传输数据的,所以我们可以经由过程 Chrome Developer Tools 找到真实的请求,直接提议真实请求的抓取就可以获得数据了。

打开一个新窗口

按 Ctrl+Shift+I (在 Mac 上请按 Cmd+Opt+I) 打开开辟者对象。

切换到收集( Netwotk 面板)

在窗口中打开 http://movie.douban.com/explore

在页面加载的过程中,你会在面板中看到所有的资本请求。

 


  推荐阅读

  【硅谷“技”划】关于硅谷,你知道多少?即使百闻,也不如一见

硅谷(GoogleIO大年夜会第二天)【51CTO.com原创稿件】关于硅谷,你可能读过很多文┞仿和书本,比如吴军博士的《海潮之巅》,比如环绕着乔帮主、小扎的传奇故事,已经让你对硅谷蒙上了神奇的>>>详细阅读


本文标题:pyspider爬虫教程 (2):AJAX和HTTP

地址:http://www.17bianji.com/lsqh/35191.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)