查看原文
其他

最简单的爬虫,连我都会了!python爬取招聘信息

2017-12-20 莉莉安的向日葵 Python爱好者社区

作者:莉莉安的向日葵    努力学习,努力转行!
博客专栏:https://ask.hellobi.com/blog/toughsummer


周末参加了一个名叫“程序媛计划”的线下小组活动,学习了如何用python爬取某度公司的招聘页面信息。


 


效果就是这样,目前还没有学到如何把这些数据存放起来。我想之后在秦老师这边学了数据库,就可以操作了吧。

 

回家后复习了一下,练习在某疼的招聘页面爬取信息,整理了一下写代码的过程,一方面是自己记录一下,另一方面也想和大家一起分享~


(如果你是程序大佬,围观一下就好了,不要嘲笑我这个小小白呀~如果我有哪里说错了,恳请帮忙指正!)

 

建议先了解一下基础的html语言和python语言,html只要知道有标签<></>这种东西,网页大概是怎么排布的就ok了,python的话按秦老师的课程,学到“第三方包”这一节就差不多了。

 

也可以在廖雪峰老师或w3school上了解。


首先你要有python和Sublime(直接在Jupyter Notebook也阔以哦~),并且要有Chromedriver插件。

 

程序和环境变量

https://ask.hellobi.com/blog/toughsummer/10834

 

包和chrome插件

https://ask.hellobi.com/blog/toughsummer/10740

 

做好准备工作,我们开工啦!(搓手)

#!/usr/bin/env python #coding:utf-8

首先输入灰色的两行。这是每个py文件前面都要加的“声明”,复制一下就好啦。

 

然后是加载包。你可以把包当成python的插件(反正现阶段我是这么理解的……),用到什么功能,就加载相应的包。

from selenium import webdriver import time

from……import……和import……都是加载包的语句。关于这两个句子的区别,知乎上有个回答很形象,可以戳链接了解一下:

 

https://www.zhihu.com/question/38857862/answer/90981260

 

第一句的selenium包,准确来说是一个python实现自动化操作的包。自动化操作就是,告诉电脑该干嘛,让你的电脑自己干。比如自己开个软件,自己关掉窗口,当然也包括自己打开网页并且把网页上的内容摘下来。所以我们可以用selenium包来做爬虫。

 

能用来做爬虫的包有很多,天善的视频课程里有个免费爬虫课用的beautifulsoup,也很好。但是它操作很快,有时候会被对方发现是机器人,从而被禁掉。所以我们一开始还是用selenium入门学习比较好。

 

Webdriver就是selenium包里的一个类,用来进行网页相关操作。

 

载入以后,我们第一步是让电脑认识浏览器,打开网页。

dr = webdriver.Chrome() dr.get("http://hr.tencent.com/position.php?keywords=&lid=0&tid=87&start=0#a")

我们用了一个变量dr,用chrome方法让它打开chrome。注意chrome的C要大写。

 

然后我们用get方法让dr访问招聘网页的地址,就是某疼社招技术岗页面。

 

代码先写到这里,下一步我们来分析一下页面上的内容。

 

我们自己用chrome浏览器打开这个网页,看到页面是这样的。

 

怎么让程序看到这一部分的内容,并抓到它呢?

 

我们按F12(右键-检查也可以),用开发者模式看一看它的代码。

 

 

点“1”这个小鼠标,再把鼠标移到网页上我们要找的内容,发现文字的底色改变了。

 

这个功能就是用来定位网页上的元素,找到对应的代码。

 

点一下变色的内容,发现下面的代码也跳转到了对应位置。

 

 

我们把鼠标在这附近移动,看到对应元素的变化。


 

可以看到,这块其实是个表格,每个”<tr></tr>”标签都是一行,class名为“h”的行是标题行,class名为even的是奇数行,odd是偶数行。

 

一开始看到这个奇偶数,非常生气!为什么它要把行弄得不一样呢!如果每行同一个名字,我一句话就可以找到它,可偏偏不同!

 

后来仔细看了一下页面,发现奇数行是白底,偶数行是蓝底,看来是为了表格更美观而设计的。那没办法,我们只好后面稍微辛苦一点了。

 

接下来我们就定位到相应的元素去。

 

写代码:

time.sleep(3) main_content =dr.find_element_by_class_name("tablelist") evens =main_content.find_elements_by_class_name("even")

我们先让程序停顿3秒,给网页一点时间加载出来。

 

接着用main_content这个变量获取网页中class名为“tablelist”的元素。

 

Evens则是名为“even”的元素们。

 

要注意,因为每一个奇数行都叫“even”,所以我们要find_elements_by_class_name,这一步得到的结果也是多个元素,所以evens是一个list列表,里面存了好多个元素。

 

然后我们要从evens里的每个元素中,提取到每一列的对应信息。

 

所以先写个for循环,遍历evens里的每个even

for even in evens:

接着我们发现,


 

后面四列很好弄,就是单元格里的纯字符串或数值而已,第一列的话有个超链接,看起来非常复杂。Ok,那我们先搞下面的。

 

但问题来了,现在没有class或者id了,咋办捏。没事,我们还有个by xpath方法。

 

Xpath就是<*></*>的这个*,很好理解的。

代码如下:

    tds= even.find_elements_by_xpath("td")     career_position= tds[1].text     career_num= tds[2].text     career_city= tds[3].text     career_time= tds[4].text

(.text是获得元素的文本信息的方法,就是会把<**>??</**>里的??拿出来)

好了,后面四个信息都拿到了。

 

其实第一个也拿到了,因为第一列就是第一个td元素,所以存放在td[0]里面。那么我们只要在td[0]里面,用xpath再找到下面的<a……></a>,然后取出里面的文本就可以了。

career_name= tds[0].find_element_by_xpath("a").text

最后打印

print(career_name,'',career_position,' ',career_num,' ',career_city,' ',career_time,'\n')

好了我们来试一下:

 

 

心情愉悦!!

 

接着加上序号,再把odd行也抓下来~

 

大家可以自己试着写一写odd行的抓取代码,其实一样的哦~我就不重复了。还可以给它们加上编号:

 

 

接着我们学怎么翻页。类似的,找到翻页的按钮

 

 

哟!发现它有个id属性!id是最开心的,因为每个网页上元素的id必须唯一,不用担心有重复值。我们通过next这个id定位到按钮,然后用click()方法点击它就可以啦。

next_bottom =main_content.find_element_by_id("next") next_bottom.click()

那点击之后,就是套一个循环,让程序在每一页里自动点击了。


 

好啦,这个程序就写完啦,你还可以把它整合成类和方法。我对类和方法还不怎么懂,还在学习中,只会照着老师的程序改,所以就不瞎说了。

 

放一下整合前的代码和整合后的代码,都只抓取前5页信息。

 

看到最后的你辛苦了!希望对你有所帮助!我们一起学习呀!!

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

0.小编的Python入门视频课程!!!

1.崔老师爬虫实战案例免费学习视频。

2.丘老师数据科学入门指导免费学习视频。

3.陈老师数据分析报告制作免费学习视频。

4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

5.丘老师Python网络爬虫实战免费学习视频。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存