动态网页抓取(【干货】拉勾网换的更新注意:目前拉勾了json结构)
优采云 发布时间: 2022-02-02 00:04动态网页抓取(【干货】拉勾网换的更新注意:目前拉勾了json结构)
5-14更新
注:目前,拉狗网已经更改了json结构。以前是content-result,现在改成content-positionResult-result,所以写代码的时候要特别注意加一层positionResult分析。
现在很多网站使用了一种叫做Ajax(异步加载)的技术,也就是说,当一个网页打开的时候,会先把上面的一些东西展示给你,然后再慢慢加载剩下的。
所以你可以看到很多网页,慢慢的刷,或者一些网站随着你的移动,很多信息都在慢慢加载。这种页面的好处是页面加载速度非常快(因为它不必一次加载整个内容)。
但这对我们写爬虫来说很不方便,因为你不能总是爬你想要的!
让我们举个例子。因为最近想分析一下拉狗网的工作情况数据,就去找他们网站:(注意!爬取的内容仅限于学术交流!请勿用于商业用途!)
图片
如您所见,这里有很多招聘信息。注意这里当我们点击下一页的时候
图片
我们可以发现网页地址是直接加载的,没有更新!!
图片
这显然是一个动态页面。让我们写一个爬虫来爬取页面,看看我们能得到什么内容。现在我们应该可以很快地编写(构建)这样一个爬虫了,对吧?(其实没什么)
图片
您可以看到输出,并且可以浏览所有源代码,而无需任何有关作业的信息!
图片
如果你觉得不直观,我教你一个技巧,我们简单的输出成一个html看看
,但实际上非常有条理,都对应着关键值。这是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
图片
我们可以运行看看效果

给item添加数据,然后yield,大家应该都很熟悉了
图片
但是,这里只爬取了一个网页的内容。如何获取更多页面的内容?我会在下一篇博客中介绍。有兴趣的童鞋可以自己试一试。如果您在下一页上获得内容,请使用上面教授的方法查找资源。