【图文详解】scrapy爬虫与Ajax动态页面——爬取拉勾网职位信息(1)

5-14更新

注意:目前拉勾网换了json结构,之前是content - result 现在改成了content- positionResult - result,所以大家写代码的时候要特别注意加上一层positionResult的解析。

现在很多网站都用了一种叫做Ajax(异步加载)的技术,就是说,网页打开了,先给你看上面一部分东西,然后剩下的东西再慢慢加载。
所以你可以看到很多网页,都是慢慢的刷出来的,或者有些网站随着你的移动,很多信息才慢慢加载出来。这样的网页有个好处,就是网页加载速度特别快(因为不用一次加载全部内容)。

但是这对我们写爬虫就不方便了,因为你总是爬不到你想要的东西!

我们举个例子,我因为最近想分析拉勾网有关职位情况的数据,所以我上了他们网站:(注意!爬取的内容仅限于学术交流!请勿用于商业用途!)
http://www.lagou.com/zhaopin/

image

可以看到,这里有很多职位信息。注意,这里当我们点下一页

image

我们可以发现,网页地址没有更新就直接加载出来了!!

image

这明显就是一个动态页面,我们写个爬虫来爬一下网页,看看能得到什么内容,现在应该能很快写出(搭出)一个这样的爬虫吧?(其实啥也没有)

image

可以看到输出,你可以把所有源代码浏览一遍,里面没有任何有关职位的信息!

image

如果你觉得不直观,我教你一招,我们简单的把它输出到一个html看看

![](https://raw.githubusercontent.com/hk029/blog/master/爬虫/动态加载网页爬取/1461237819572.png" width=400px />

就是这么个情况。。关键部分呢!空的!!!

image

寻找可以网页

这时候要怎么办呢?难道信息就爬不了吗??

当然不是,你要想,它只要是显示到网页上了,就肯定在某个地方,只是我们没找到而已。

只不过,这个时候,我们就要费点功夫了。我们还是回到刚才的网页上去点F12,这时候,我们用network功能

image

这时候你可能看到里面没东西,这是因为它只记录打开后的网络资源的信息。
我们按F5刷新一下。

image

你可以看到开始唰唰的刷出东西来了……太快了,我眼睛有点跟不上了,我们等它停下来,我们随便点个资源,会出现右边的框,我们切换到response

image

然后我们就开始找可疑的网页资源。首先,图片,css什么之类的可以跳过,这里有个诀窍,就是一般来说,这类数据都会用json存,所以我们尝试在过滤器中输入json

image

我们发现了2个资源感觉特别像,其中有个名字直接有position,我们点击右键,在新标签页打开看看

![](https://raw.githubusercontent.com/hk029/blog/master/爬虫/动态加载网页爬取/1461238727325.png" width=200px />

虽然看上去很乱(密集恐惧症估计忍不了)但是实际上很有条理,全是键值对应的,这就是json格式,特别适合网页数据交换。

image

这里我们发现就是这个了!所有职位信息都在里面,我们赶紧记录下它的网址

网页构造

通过观察网页地址可以发现推测出:
http://www.lagou.com/jobs/positionAjax.json?这一段是固定的,剩下的我们发现上面有个北京

image

我们把这里改成上海看看,可以看见又出来一个网页内容,刚好和之前网页把工作地改成上海,对应的内容一致

image
image

所以我们可以得出结论,这里city标签就代表着你选的工作地点,那我们要是把工作经验,学历要求,什么都选上呢??可以直接看到,网址就变了很多

<img
src="https://raw.githubusercontent.com/hk029/blog/master/爬虫/动态加载网页爬取/1461239055953.png)

我们直接把这些复制到刚才我们找到的网页上


image

可以发现和网页内容一致

image

现在我们可以下结论,我们需要的就是这个网址:
http://www.lagou.com/jobs/positionAjax.json

然后后面可以加这些参数:

gj=应届毕业生&xl=大专&jd=成长型&hy=移动互联网&px=new&city=上海

通过修改这些参数,我们就可以获取不同的职位信息。

<font color=red>注意:</font>这里的构造还比较简单,有时候,有些网址的构造远比这个复杂,经常会出现一些你不知道什么意思的id=什么的,这个时候,可能这个id的可能值可能就在别的文件中,你可能还得找一遍,也可能就在网页源代码中的某个地方。
还有一种情况,可能会出现time=什么的,这就是时间戳,这时候,需要用time函数构造。总之,要具体情况具体分析。

import time
time.time()

编写爬虫

因为这个网页的格式是用的json,那么我们可以用json格式很好的读出内容。
这里我们切换成到preview下,然后点content——result,可以发现出先一个列表,再点开就可以看到每个职位的内容。为什么要从这里看?有个好处就是知道这个json文件的层级结构,方便等下编码。

image

整个处理的代码就那么几句话,可以可出,这里完全和刚才的层级结构是一致的。先content然后result然后是每个职位的信息。

        jdict = json.loads(response.body)
        jcontent = jdict["content"]
        jresult = jcontent["result"]
        for each in jresult:
            print each['city']
            print each['companyName']
            print each['companySize']
            print each['positionName']
            print each['positionType']
            print each['salary']
            print ''

当然还是要引入json

    import json
image

我们可以运行看看效果

![](https://raw.githubusercontent.com/hk029/blog/master/爬虫/动态加载网页爬取/1461242703391.png" width=400px />

然后,我们可以把信息存到文件或者数据库了,那就是之前学过的内容了。

修改items.py

加入你需要的内容

image

修改settings.py

看你是需要存入数据库还是文件,之前都说过了

修改pipelines.py

如果需要加入数据库,这里加上数据库操作,如果需要写入文件,可能不用修改这个文件

修改parse()

把数据加入item,然后yield,大家应该很熟悉了

image

但是,这里还只爬了一个网页的内容,对于更多页面的内容,怎么获取呢?我在下篇博客会有介绍,有兴趣的童鞋可以自己试试看如果获取下一页的内容,用上面教的查找资源的办法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容