以大学本科专业为关键词,利用Python快速爬取100万职位信息
一、系统环境:
Windows 7+Python3.4+MongoDB
二、爬取过程:
(1)获取大学本科所有专业名称
# 获取大学本科专业名称
def get_name():
url = 'http://yx.liexue.cn/zy/'
wbdata = requests.get(url,headers=header).content
soup = BeautifulSoup(wbdata,'html.parser')
name = soup.select("dd.but > a")
name_list = []
for n in name:
# print(n.text)
name_list.append(n.text)
# print(soup)
print(name_list)
# print(len(name_list))
return name_list
(2)以专业名称作为搜索关键词获取职位信息的数量
url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl={0}&kw={1}&sm=0'.format("全国",keywords)
wbdata = requests.get(url,headers=header).content
soup = BeautifulSoup(wbdata,'lxml')
job_count = re.findall(r"共<em>(.*?)</em>个职位满足条件",str(soup))[0]
pages = (int(job_count)//60)+1
(3)获取职位信息
jobs_url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl={0}&kw={1}&sm=0&p={2}'.format("全国",keywords,page)
job_name = soup.select("table.newlist > tr > td.zwmc > div > a")
# company_name = soup.select("table.newlist > tr > td.gsmc > a")
salarys = soup.select("table.newlist > tr > td.zwyx")
locations = soup.select("table.newlist > tr > td.gzdd")
times = soup.select("table.newlist > tr > td.gxsj > span")
for name,salary,location,time in zip(job_name,salarys,locations,times):
data = {
'name':name.get_text(),
'salary':salary.get_text(),
'location':location.get_text(),
'time':time.get_text(),
'cate_name':keywords
}
print(keywords,data,page)
jobs_info.insert_one(data)
print("插入1条数据完成")
(4)使用多进程执行程序
if __name__ == '__main__':
pool = Pool(processes=4)
pool.map_async(get_name_job_info,get_name())
pool.close()
pool.join()
最后,抓取了100多万条智联招聘上的职位信息,使用了多进程和多线程,耗时很快。