zoukankan      html  css  js  c++  java
  • 让大蛇(Python)帮你找工作

    最近有想换工作的想法,于是习惯性的去了XXX网站看有没有合适的职位,输入几个条件后,便开始了对海量的数据进行一页一页的浏览,不知不觉也就走了神........

    作为程序员怎么可以这样找工作了?于是想写个程序来做这个无聊而重复的赛选工作,最近在研究Python,真好又从书上看到了有个叫"网络爬虫"的概念,本来以为这是个复杂的技术,没想到区区几行几代便揭开了这只"爬虫"的面纱,于是针对这个网站试着写一个"爬虫".


    经过三天晚上的加班,终于大功告成,运行程序两分钟左右4万多个职位已经全部保存到我本地的文件中.

    目前只是简单的版本,只能根据你输入的条件获取到所有结果中的"职位名称"以及"公司名称",如果想要进行扩展,例如展示出"职位的技能要求,待遇"等可以在已有功能的基础上进行扩展.下面是源码以及思路.(考虑到执行该爬虫可能会对该网站的性能有一定的影响,所以程序中没有给出该网站的真实信息,如果您猜出了该网站的真实信息,也请不要在本博客中公布,否则一切后果自负,谢谢合作微笑)

    import urllib.request
    import re
    
    PAGE_NUMBER = 1
    
    def filter_job(url):
    	#Python 3.X 必须用 urllib.request打开一个URL
    	text = urllib.request.urlopen(url).read().decode("gbk")
    	page_navi(text)
    
    def page_navi(page_source):
    	#第一页直接获取信息
    	extract_job_info(page_source)
    	#"下一页"链接的正则
    	next_page_regular = r'</td><td><a href=(.*?)class="orange1".+?style=.*?>(.*?)<img .*?pageron.gif.*? />.*?</a></td></tr>'
    	next_pagelink_set = re.findall(next_page_regular, page_source)
    	if len(next_pagelink_set) > 0:
    		#如果需要更改全局变量,则需要先用global来声明
    		global PAGE_NUMBER
    		PAGE_NUMBER = PAGE_NUMBER + 1
    		print("*****************************"+str(PAGE_NUMBER)+"******************************")
    		next_url = next_pagelink_set[0][0].split('"')[1]
    		#解析出"下一页"按钮对应的链接,然后递归调用
    		filter_51job(next_url)	
    
    def extract_job_info(page_source):
    	#职位名称的正则
    	job_name_reqular = r'<a .*? class="jobname" .*>(.*?)</a>'
    	#公司名称的正则
    	com_name_reqular = r'<a .*? class="coname" .*>(.*?)</a>'
    	job_name_set = re.findall(job_name_reqular, page_source)
    	com_name_set = re.findall(com_name_reqular, page_source)
    	#使用zip()对结果进行展示
    	for job_name, com_name in zip(job_name_set, com_name_set):
    		print("Job Name:" + job_name + " "*5 + "  Company Name:" + com_name)
    	
    
    if __name__ == "__main__":
    	#输入一定条件后,结构列表的首页URL,只要输入这个作为条件
    	url = '''http://XXXXX.XXXXXXX.com/list/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'''
    	filter_job(url)
    
    


    以上代码只是列出的基本的信息,如果有什么好的建议,或者是改进的地方,欢迎指出


  • 相关阅读:
    selenium+java+testNG+maven环境搭建
    pycharm配置git版本管理
    Android的WebView有哪些坑?
    Android M中 JNI的入门学习
    Android初学者必知会的编程规范
    Android Studio中怎么使用DDMS工具?
    Android开发中适配多种 ROM 的快捷方式是如何实现的?
    Android中ListView 控件与 Adapter 适配器如何使用?
    Android中如何为自定义控件增加状态?
    29个android开发常用的类、方法及接口
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3211797.html
Copyright © 2011-2022 走看看