动态网页抓取(【干货】拉勾网换的更新注意:目前拉勾了json结构)

优采云 发布时间: 2022-02-02 00:04

  动态网页抓取(【干货】拉勾网换的更新注意:目前拉勾了json结构)

  5-14更新

  注:目前,拉狗网已经更改了json结构。以前是content-result,现在改成content-positionResult-result,所以写代码的时候要特别注意加一层positionResult分析。

  现在很多网站使用了一种叫做Ajax(异步加载)的技术,也就是说,当一个网页打开的时候,会先把上面的一些东西展示给你,然后再慢慢加载剩下的。

  所以你可以看到很多网页,慢慢的刷,或者一些网站随着你的移动,很多信息都在慢慢加载。这种页面的好处是页面加载速度非常快(因为它不必一次加载整个内容)。

  但这对我们写爬虫来说很不方便,因为你不能总是爬你想要的!

  让我们举个例子。因为最近想分析一下拉狗网的工作情况数据,就去找他们网站:(注意!爬取的内容仅限于学术交流!请勿用于商业用途!)

  

  图片

  如您所见,这里有很多招聘信息。注意这里当我们点击下一页的时候

  

  图片

  我们可以发现网页地址是直接加载的,没有更新!!

  

  图片

  这显然是一个动态页面。让我们写一个爬虫来爬取页面,看看我们能得到什么内容。现在我们应该可以很快地编写(构建)这样一个爬虫了,对吧?(其实没什么)

  

  图片

  您可以看到输出,并且可以浏览所有源代码,而无需任何有关作业的信息!

  

  图片

  如果你觉得不直观,我教你一个技巧,我们简单的输出成一个html看看

  ![](爬虫/动态加载网页爬取/72.png" width=400px />

  就是这样。. 关键部分!空的!!!

  

  图片

  找到网站

  这个时候我们应该怎么做?信息爬不起来??

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

  但是,这一次,我们必须努力。我们还是回到刚才的网页,点击F12。这时候,我们使用网络功能

  

  图片

  这个时候你可能什么都看不到,因为它只记录了打开后的网络资源信息。

  让我们按 F5 刷新。

  

  图片

  可以看到有东西开始滑动了……太快了,我的眼睛跟不上,我们等它停止,我们点击任意资源,右边的框会出现,我们切换到响应

  

  图片

  然后我们开始寻找可疑的网络资源。首先,图片、css等可以跳过。这里有个窍门,就是一般来说这种数据会存储在json中,所以我们尝试在filter中输入json

  

  图片

  我们找到了2个感觉非常相似的资源,其中一个直接带有位置的名称,我们右键单击并在新选项卡中打开它。

  ![](爬虫/动态加载网页爬取/25.png" width=200px />

  虽然看起来杂乱无章(密集恐惧症估计难以忍受),但实际上非常有条理,都对应着关键值。这是json格式,特别适合网页数据交换。

  

  图片

  在这里我们发现它就是它!所有工作信息都在里面,我们快速记录下它的URL

  网页结构

  通过观察网页地址可以发现:

  这一段是固定的,剩下的我们发现上面有一个北京

  

  图片

  我们改成上海看看,可以看到又出现了一个网页,和之前工作地点改成上海的网页一模一样,对应的内容也一样。

  

  图片

  

  图片

  所以我们可以得出结论,这里的城市标签代表了你选择的工作地点,那么如果我们选择工作经验、*敏*感*词*要求等等一切呢?? 直接可以看到,URL变化很大

  src="爬虫/动态加载网页爬取/53.png)

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

  

  图片

  可以发现和网页的内容是一致的

  

  图片

  现在我们可以得出结论,我们只需要这个 URL:

  然后您可以稍后添加这些参数:

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

  通过修改这些参数,我们可以获得不同的作业信息。

  注意:这里的构造比较简单。有时,某些 URL 的构造远比这复杂得多。经常有 id= 或者你不知道是什么意思的东西。这个时候这个id的可能值可能在其他文件中,你可能要查一下,也可能在页面源代码的某个地方。

  还有一种情况可能会出现time=什么的,就是时间戳。在这种情况下,需要使用时间函数来构造它。总之,要具体情况具体分析。

  import time

time.time()

  写爬虫

  因为这个网页的格式是json,那么我们可以很好的读取json格式的内容。

  这里我们切换到预览,然后点击内容-结果,可以先找到一个列表,然后点击查看各个位置的内容。为什么从这里看?一个好处就是知道json文件的层次结构,方便后面编码。

  

  图片

  整个处理代码就那么几个字,就可以写出来,和刚才的层次结构完全一致。首先是内容,然后是结果,然后是每个位置的信息。

   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

  

  图片

  我们可以运行看看效果

  ![](爬虫/动态加载网页爬取/91.png" width=400px />

  然后,我们可以将信息保存到文件或数据库中,这是我们之前学到的。

  修改 items.py

  添加你需要的东西

  

  图片

  修改settings.py

  正如我之前所说,这取决于您是否需要存储在数据库或文件中

  修改 pipelines.py

  如果需要加入数据库,请在此处添加数据库操作。如果你需要写一个文件,你可能不需要修改这个文件

  修改 parse()

  给item添加数据,然后yield,大家应该都很熟悉了

  

  图片

  但是,这里只爬取了一个网页的内容。如何获取更多页面的内容?我会在下一篇博客中介绍。有兴趣的童鞋可以自己试一试。如果您在下一页上获得内容,请使用上面教授的方法查找资源。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线