招聘需求分析(爬虫+词云)

咳咳 作为一个大三的人 正在很努力地想找一份工作 那么究竟要掌握什么样的技能才能找到工作呢 ? 瞎逼逼 肯定是不行的 所以我打开了 百度


image.png

然后 随便找了个招聘网站点了进去


image.png

就它吧
接着 在职位搜索哪里 填进去相关信息
image.png

image.png

就跳出来 一堆工作了 随便点进去一个


image.png

天猫美工 就能从任职要求里 看到到底需要什么才能成功任职了
下面就是发挥我们的爬虫能力 不管他是啥 先把他爬下来再说 分词什么的 我们一点点做
先放代码

from urllib import request
import time
from bs4 import BeautifulSoup
if __name__=="__main__":
    q = open("url.txt","rt")
    f = open('dataaa.txt','wt')
    num = 0
    for tar_url in q:
        head={ }
        head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
        try:
            http_req = request.Request(url=tar_url,headers=head)
            http_response = request.urlopen(http_req)
            http_content = http_response.read().decode()
            #print(http_content)
            http_content_soup = BeautifulSoup(http_content,'lxml')
            info = http_content_soup.find_all('div',class_="compaydetail-box")
            flag = False
            try:
                for i in info[0]:
                    try:
                        text = i.text
                        if flag :
                            f.write(text)
                            f.write("\n")
                        if(text=="任职要求:" or text=="任职要求" or text=="岗位要求:" or text=="岗位要求"
                           or text=="任职资格" or text=="任职资格:" or text=="要求" or text=="要求:"
                           or text=="职位要求:" or text=="职位要求"):
                            flag = True
                            num += 1
                            f.write(str(num))
                            f.write("\n")
                            print("over")
                    except:
                        continue
            except:
                continue
            time.sleep(0.1)
        except:
            continue
    f.close()

url是用来存放当前页面的网址的 也就是我们如何到招聘页面的方法 这个我们放到后面来讲
dataaa呢 使用存放招聘需求的也就是 我们需要分词的句段

好的 接下来将代码 我是用的bs4库 那就先看这个属于那个div块

image.png

经过重重盘查 发现这段 属于 class="tab-inner-cont"
嗯 好的 那就先到这个块 但是随后我就发现如果把这个设为关键字 根本没有任何匹配内容
那就先看看 .read()到什么东西 如果我们把class = "tab_inner-cont" 作为搜索条件 去进行文本搜索 就会发现 同样匹配不到任何内容 嗯 那就说 html上的内容和我们request的内容根本不一不一样 那自然是以 我们request的内容为准
于是 我把.read()到的东西 先开了个记事本 然后 进行搜索 “任职要求” 就发现了
原来是 在这个块里
'div',class_="compaydetail-box"
那么 我们只要设置这个为匹配的关键属性 就能成功获得数据

接着是判断任职要求 我发现他是把所有的行都设为了 <p> </p>
那遍历我们得到的数组 如果 发现满足要求 就说明 之后所有的内容 都是我们要求的任职条件了


但是呢 如果 你打开多个页面 就会发现他对任职条件的描述 不一定都命名为 任职要求 也有叫岗位要求的 也有任职资格的 这里 我翻了一页60个左右 整合了一下 就以我if中的判断条件为依据开始 爬取了

需要注意的是 我们爬到的网址可能过期 和 可能根本没有这个class = "compaydetail-box"块
所以要放置几个异常抛掷 并且我感觉这个网站对爬取速度也有要求 所以设置了sleep时间


接下来 就将第二部分 url的爬取
同样 先放代码

from urllib import request
from bs4 import BeautifulSoup

if __name__=="__main__":
    f = open("url.txt","wt")
    for i in range(1,91):
        url_base="http://sou.zhaopin.com/jobs/searchresult.ashx?bj=160000&jl=%E4%B8%8A%E6%B5%B7&sm=0&isfilter=0&fl=538&isadv=0&sg=44b41480a5814a11b14c9379449b7f68&p="
        url = url_base+str(i)
        head={}
        head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
        html_req = request.Request(url=url,headers=head)
        html_response = request.urlopen(html_req)
        html_content = html_response.read().decode()
        html_content_soup = BeautifulSoup(html_content,"lxml")
        url_list = html_content_soup.find_all("td",class_="zwmc")
        num = 1
        for url in url_list:
            #print(str(num))
            #print(url)
            #print(url.a.get("href"))
            f.write(url.a.get("href"))
            f.write("\n")
    #           <table cellpadding="0" cellspacing="0" width="853" class="newlist">
    f.close()
image.png

所有的招聘有90个页面 然后仔细观察这个90个url的网址 就会发现
http://sou.zhaopin.com/jobs/searchresult.ashx?bj=160000&in=210500%3b160400%3b160000%3b160500%3b160200%3b300100%3b160100%3b160600&jl=%E4%B8%8A%E6%B5%B7&sm=0&kt=2&isfilter=0&fl=538&isadv=0&sg=f8cf4a43df6b46ce80c76044a5f1822b&p=1


http://sou.zhaopin.com/jobs/searchresult.ashx?bj=160000&in=210500%3b160400%3b160000%3b160500%3b160200%3b300100%3b160100%3b160600&jl=%E4%B8%8A%E6%B5%B7&sm=0&kt=2&isfilter=0&fl=538&isadv=0&sg=f8cf4a43df6b46ce80c76044a5f1822b&p=2

image.png

只有这个 p不一样 那么 很容易 只要写一个 循环语句 就能从1到90了
然后 接着分析 div块


image.png

我们只要点击 这个子串 就到转向招聘页面 那么 一定有一个 href 指向招聘页面


image.png

好的 我们根据页面的分布 找到了对应的代码块 接着只要将这个找到这个小块里的对应的href就可以了
我找的是
url_list = html_content_soup.find_all("td",class_="zwmc")

找到之后 将他write到url中 留给 第一部分解决


下面是第三部分分词

import jieba
if __name__=="__main__":
    q = open("dataaa.txt", "rt")
    f = open('divide-text.txt', 'wt')
    file_path = "stopwords.txt"
    stopwords = [line.strip() for line in open(file_path, "r").readlines()]
    for text in q:
        word_list = jieba.cut(text, cut_all=False, HMM=True)
        for word in word_list:
            if word in stopwords:
                continue
            if len(word) > 1:
                f.write(word + " ")
        f.write("\n")
    f.close()

stopwords是停用词表 根据多次词云返回 设置停用词表这个没有什么好说的


from wordcloud import WordCloud
import matplotlib.pyplot as plt
f = open("divide-text.txt","rt")
text = f.read()
font_path = "C:\Windows\Fonts\simfang.ttf"
wc = WordCloud(font_path=font_path,background_color="white",max_words=80,width=1000,height=860,margin=2)
wc.generate(text)
plt.figure()
plt.imshow(wc)
plt.axis("off")
plt.show()
wc.to_file("fourth.png")

这里要注意的是 中文词云属性的设置 font_path 设置中文的字体 如果不设置的话 就出现了 迷之方框里面什么都没有 能看到的字 只有几个英文 background_color如同字面意思一般是背景颜色 max_words 字面意思 最大单词数量 = V = 后面是图片大小的一般设置

最后四张图片 很遗憾的是 第三次词云的制作 我忘记改代码 导致被覆盖了 QAQ


第一次

很明显能够看出来 。。。。 加了许多没什么用的词语 加入停用词表


第二次

少了很多 但是依旧没有 继续加入停用词表
第三次

这么一看 似乎差不多了 但是其实是... ...第四次的 也就是说 中间还有一次 停用词表的更新


第四次

小结:唔 其实即使是第四次词云也没有达到我原本的打算 我原打算 这将会是一张全都是技术名词的词云 现在大部分全是虚的品质 爬取到的词条也仅仅接近5千多条 离2w条还差的很远
还是要继续学习啊啊啊啊啊啊啊啊啊

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

推荐阅读更多精彩内容

  • 做淘宝真的要刷单么?那些所谓的七天螺旋,如果你一个新开的店,没权重没流量,不刷单哪来的螺旋给你? 淘宝大环境下,小...
    我是盼盼呢阅读 9,711评论 1 16
  • 本文实现拉勾网的爬虫,抓取招聘需求,统计出的词频前70的关键词,当然数量可以自己定,以深圳市的python招聘岗位...
    谦面客阅读 1,777评论 3 12
  • 常用概念: 自然语言处理(NLP) 数据挖掘 推荐算法 用户画像 知识图谱 信息检索 文本分类 常用技术: 词级别...
    御风之星阅读 9,152评论 1 25
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • 本文章来自【知识林】 Git是一个版本管理工具,类似但优越于CVS、SVN等,具体的好处在使用过程自然能有所体会。...
    钟述林阅读 755评论 0 0