爬虫入门12Pyspider框架入门—Ajax和HTTP

Posted 一步一步学Python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫入门12Pyspider框架入门—Ajax和HTTP相关的知识,希望对你有一定的参考价值。


前面我们已经讲过如何在html文档中提取链接和信息,但是我们要获取的内容可能会更为复杂,不仅是解析麻烦,加载的方式也是多变的,比如AJAX。看过我前面文章的同学,应该对AJAX不陌生了,我们今天不写具体的脚本,只是单纯的来讲讲如何在Pyspider框架中获取AJAX加载的内容

Ajax

如何才能获取真正的数据请求呢?
打开浏览器的调试,在网络标签下面,我们会看到一个特殊的内容XHR。
Ajax是使用XMLHttpRequest对象来发送和检索数据的,我们一般简称为XHR方式。
我们可以通过上下滑动页面,来查看一下XHR下面,哪些增加了一些json文件,这就是加载内容的关键信息。
【插入图片,XHR】

我们随便点开其中一个,在消息头中获取真正的请求网址http://api.twitch.tv/kraken/streams?limit=20&offset=0&game=Dota+2&broadcaster_language=&on_site=1
这个网址现在经过实验,已经是无效的了,在此仅作参考。
这个网址中包含了频道信息集合,是一个list。

class Handler(BaseHandler):
    @every(minutes=10)
    def on_start(self):
        self.crawl('http://api.twitch.tv/kraken/streams?limit=20&offset=0&game=Dota+2&broadcaster_language=&on_site=1', callback=self.index_page)
   @config(age=10*60)    def index_page(self, response):        return [{                "name": x['channel']['display_name'],                "viewers": x['viewers'],                "status": x['channel'].get('status'),             } for x in response.json['streams']]

我们可以使用response.json方法将json内容装换成一个dict对象。
另外,由于频道列表不断在改变,我们需要定时更新,这里设置为10分钟更新一次。

HTTP

如果我们在访问HTTP页面时,返回了403 Forbidden或者需要一些登陆信息,我们可以从HTTP请求中获取。
下面是一个简单的GET请求。我们可以从浏览器的调试工具中获取。

GET / HTTP/1.1Host: example.com
Connection: keep-alive
Cache-Control: max-age=0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.45 Safari/537.36Referer: http://en.wikipedia.org/wiki/Example.com
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8If-None-Match: "359670651"If-Modified-Since: Fri, 09 Aug 2013 23:54:35 GMT

这些头信息,我们可以在crawl_config中定义下来,调用crawl方法时会用到。

    headers={        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'
    }
    crawl_config = {        'headers':headers,        'timeout':1000
    }

以上是关于爬虫入门12Pyspider框架入门—Ajax和HTTP的主要内容,如果未能解决你的问题,请参考以下文章

爬虫学习笔记(二十四)—— pyspider框架

Pyspider的基本使用 -- 入门

python爬虫用啥框架

网络爬虫入门——案例三:爬取大众点评的商户信息

pyspider爬虫框架的安装和使用

pyspider和pyquery总结