咳咳 作为一个大三的人 正在很努力地想找一份工作 那么究竟要掌握什么样的技能才能找到工作呢 ? 瞎逼逼 肯定是不行的 所以我打开了 百度
然后 随便找了个招聘网站点了进去
就它吧
接着 在职位搜索哪里 填进去相关信息
就跳出来 一堆工作了 随便点进去一个
天猫美工 就能从任职要求里 看到到底需要什么才能成功任职了
下面就是发挥我们的爬虫能力 不管他是啥 先把他爬下来再说 分词什么的 我们一点点做
先放代码
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块
经过重重盘查 发现这段 属于 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()
所有的招聘有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
只有这个 p不一样 那么 很容易 只要写一个 循环语句 就能从1到90了
然后 接着分析 div块
我们只要点击 这个子串 就到转向招聘页面 那么 一定有一个 href 指向招聘页面
好的 我们根据页面的分布 找到了对应的代码块 接着只要将这个找到这个小块里的对应的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条还差的很远
还是要继续学习啊啊啊啊啊啊啊啊啊