源码链接:https://github.com/Paradoxical-whimsy/job_spider(建议用浏览器打开)文件内MAX_PAGE、area_list、position可根据需求修改。
下载教程:GitHub下载指南
某日在朋友圈炫耀了一下之前的豆瓣爬虫,某个好友看见之后找我帮忙爬一下前程无忧的数据,报酬是请我喝奶茶。作为乐于助人的我,Paradoxical怎么会坐视不理呢?¯ω¯还可以顺便挑战一下自己。于是Paradoxical询问了他的要求。
他的要求是获取若干个地区的某个职位的数据(公司、职位名、工资、职位介绍),但是只需要获取一定的页数,因为后面页数的职位相关度有些偏差……
哼哼,这么简单的要求,三下五除二就搞定了,就算不会也可以请教程序猿小哥哥¯ω¯。
那么先去前程无忧的网站看一下。在百度搜索后,点开链接。
看来是首页,没有什么东西,在搜索栏随便输入一下看看吧。
嗯,出来了结果。再输入其他关键字试试。
诶,这网址怎么这么像?观察了一下,只有一部分不同。
这可能就是关键字吧?但是为什么是这样的呢?于是Paradoxical去问一下惨绿青年小哥哥。
惨绿青年:这是url编码,因为url不能是中文,所以会自动把中文换成特定的编码后再传到服务器。
哦~原来是这样。那我试试把这串符号改成中文。
这样这个位置就可以用关键字格式化了。那么页数会不会也在链接里?一试便知。
点击下一页按钮后这个位置变成了2,看来页数也在链接里。
好了,接下来来看看地区会不会也在链接里。拉到页面上方,在地区里选择北京,看下链接有什么变化。
可以看到地点换成北京后,上图的红框位置也发生了变化,看来这个位置是地区的代码了。那么多个地区呢?
可以看到上图上方的红框发生了变化,010000是北京的代码,020000是上海的代码,中间的%252C应该就是连接起来的符号,应该也是url编码吧。那再加个地区看一下是否符合猜测。
看来没猜错,到时候用%252C把地区的代码连接起来再格式化网址就行了。emmm……那地区代码在哪里呢?试试按F12打开html代码看看吧。
可以看到em标签的data-value就是地区代码,由于Paradoxical能力有限,所以只能用selenium来获取了。用selenium控制浏览器打开选择地区的页面后再通过css选择器选择class为js_more的td标签下的em标签,再遍历获取它们的data-value属性和文本。丑陋的代码就不贴出来了,下面是获取的结果。
Paradoxical比较懒,只获取了热门地区的地区代码,要是好友需要再帮他添加上去吧¯ω¯。
测试一下能不能行吧。
页面是获取了,但是这里面的内容怎么乱七八糟的鸭?(#°Д°)于是又去请教小哥哥了。
惨绿青年:这是编码方式的不同而导致的,你加上一句“response.encoding = 'gbk'”就行了。
接下来可以获取数据了,先来观察一下网页吧~
根据观察,点击标题就能进入对应的职位页面,a标签的链接后面部分是相同的,都是“.html?s=01&t=0”,可根据这点获取链接。
爬虫的目标是获取公司名,工资和职位描述,这次决定用正则表达式来提取数据。
观察html后, 决定在下方html位置提取数据。
跟着提取职位名和工资。因为这两个数据挨得比较近,可以先获取整段的字符串,再精确捕获需要的数据。
最后就是职位描述了,可以看到职位描述由一个div标签里的多个p标签组成,先获取整个div标签,然后获取里面的每一个p标签里的内容,最后拼接起来。获取的结果有一些不需要的字符,把它们去掉即可。
终于提取完了,最后整理一下代码,加个循环遍历所有的职位链接,再加个保存文件的代码。QAQ
经过测试,某些职位描述不在p标签里,所以加了个判断。
把数据保存为csv文件,这样就可以用excel打开了。
终于完成了这个任务,非常感谢惨绿青年小哥哥不厌其烦地回答我的问题以及教导我。现在我心里的喜悦难以言喻,得到的不只是奶茶,还有成长的滋味。
今天也学到了很多东西呢,明天有什么新知识呢?真期待鸭~如果喜欢文章可以关注我哦~