下面是一个简单的带有AJAX请求的scrapy示例。让我们看看网站rubin-kazan.ru。
所有消息都是用AJAX请求加载的。我的目标是获取这些消息及其所有属性(作者、日期…):
当我分析网页的源代码时,我看不到所有这些消息,因为网页使用AJAX技术。但是我可以使用来自Mozilla Firefox的Firebug(或其他浏览器中的等效工具)来分析生成网页消息的HTTP请求:
它不会重新加载整个页面,而只重新加载包含消息的页面部分。为此,我单击底部任意数量的页面:
我观察到负责消息体的HTTP请求:
完成后,我分析请求的头(我必须引用将从var部分的源页面提取的这个URL,请参阅下面的代码):
以及请求的表单数据内容(HTTP方法是“Post”):
以及response的内容,它是一个JSON文件:
这是我要找的所有信息。
从现在起,我必须把所有这些知识都学以致用。为此,我们定义蜘蛛:class spider(BaseSpider):
name = 'RubiGuesst'
start_urls = ['http://www.rubin-kazan.ru/guestbook.html']
def parse(self, response):
url_list_gb_messages = re.search(r'url_list_gb_messages="(.*)"', response.body).group(1)
yield FormRequest('http://www.rubin-kazan.ru' + url_list_gb_messages, callback=self.RubiGuessItem,
formdata={'page': str(page + 1), 'uid': ''})
def RubiGuessItem(self, response):
json_file = response.body
在parse函数中,我有第一个请求的响应。
在RubiGuessItem中,我有包含所有信息的JSON文件。