中企动力 > 头条 > python项目经验

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python项目经验

Python那些事——一个Python小白5个小时爬虫经历 推广视频课程

img

微凉

关注

前言

最近业余在做一个基于.NET Core的搜索项目,奈何基层代码写好了,没有看起来很华丽的数据供测试。很巧的也是博客搜索,于是乎想到了博客园。C#也能做做页面数据抓取的,不过在博客园看到的大部分都是python实现,所以就临时想了一下看看python到底是什么东东,不看基础语法,不看语言功能,直接上代码,哪里不会搜哪里。代码完成总共用时大概4个小时,其中搭建环境加安装BeautifulSoup大概1个小时。解析HTML用时间最多了,边看demo边解析,大概2个小时,剩下的时间就是调试加保存数据了。

环境搭建

既然用python,那么自然少不了语言环境。于是乎到官网下载了3.5版本的。安装完之后,随机选择了一个编辑器叫PyCharm,话说python编辑器还真挺多的。由于本人是小白,所以安装事项不在过多赘述。

建好项目,打开编辑器,直接开工。本来之前用C#写的时候,大体思路就是获取网页内容,然后正则匹配。后来发现网上的帖子也很多。不过在搜索过程中发现,不建议用正则来匹配HTML。有正好我的正则不太好,所以我就搜了一下HTML解析工具,果不其然,人家都做好了,直接拿来用吧。没错就是这个东东:BeautifulSoup 。安装也很简单,不过中间出了个小插曲,就是bs4没有。继续搜,然后需要用pip安装一下就好了。(当然我并不知道ps4和pip是什么鬼)

思路分析

博客吗,我当然就对准了博客园,于是乎,进入博客园首页,查看请求。  

发送请求

当然我不知道python是怎么进行网络请求的,其中还有什么2.0和3.0的不同,中间曲曲折折了不少,最终还是写出了最简单的一段请求代码。  

import urllib.parseimport urllib.request# params CategoryId=808 CategoryType=SiteHome ItemListActionName=PostList PageIndex=3 ParentCategoryId=0 TotalPostCount=4000def getHtml(url,values): user_agent='Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36' headers = {'User-Agent':user_agent} data = urllib.parse.urlencode(values) response_result = urllib.request.urlopen(url+'?'+data).read() html = response_result.decode('utf-8') return html#获取数据def requestCnblogs(index): print('请求数据') url = 'http://cnblogs/mvc/AggSite/PostList.aspx' value= { 'CategoryId':808, 'CategoryType' : 'SiteHome', 'ItemListActionName' :'PostList', 'PageIndex' : index, 'ParentCategoryId' : 0, 'TotalPostCount' : 4000 } result = getHtml(url,value) return result

其实博客园这个请求还是挺标准的,哈哈正好适合抓取。因为他返回的就是一段html。(如果返回json那不是更好。。。。)

数据解析

上文已经提到了,用到的是BeautifulSoup,好处就是不用自己写正则,只要根据他的语法来写就好了,在多次的测试之后终于完成了数据的解析。先上一段HTML。然后在对应下面的代码,也许看起来更轻松一些。

1

Python 字符串格式化

src="//picblogs/face/795666/20160421231717.png" alt="" />

转载请注明出处 Python2.6+ 增加了str.format函数,用来代替原有的'%'操作符

。它使用比'%'更加直观、灵活。下面详细介绍一下它的使用方法。 下面是使用'%'的例子: 格式很像C语言的printf是不是?由于'%'是一个操作符,只能在左右

两边各放一个参数,因此右边多个值需要用元组或 ...

新月的力量_141

发布于 2017-02-19 23:07

评论(0)

阅读

(138)

通过上文的HTML代码可以看到几点。首先每一条数据都在 p(class=”post_item”)下。然后 p(“post_item_body”)下有用户信息,标题,链接,简介等信息。逐一根据样式解析即可。代码如下:

from bs4 import BeautifulSoupimport requestimport re#解析最外层def blogParser(index): cnblogs = request.requestCnblogs(index) soup = BeautifulSoup(cnblogs, 'html.parser') all_p = soup.find_all('p', attrs={'class': 'post_item_body'}, limit=20) blogs = [] #循环p获取详细信息 for item in all_p: blog = analyzeBlog(item) blogs.append(blog) return blogs#解析每一条数据def analyzeBlog(item): result = {} a_title = find_all(item,'a','titlelnk') if a_title is not None: # 博客标题 result["title"] = a_title[0].string # 博客链接 result["href"] = a_title[0]['href'] p_summary = find_all(item,'p','post_item_summary') if p_summary is not None: # 简介 result["summary"] = p_summary[0].text footers = find_all(item,'p','post_item_foot') footer = footers[0] # 作者 result["author"] = footer.a.string # 作者url result["author_url"] = footer.a['href'] str = footer.text time = re.findall(r"发布于 .+? .+? ", str) result["create_time"] = time[0].replace('发布于 ','') comment_str = find_all(footer,'span','article_comment')[0].a.string result["comment_num"] = re.search(r'd+', comment_str).group() view_str = find_all(footer,'span','article_view')[0].a.string result["view_num"] = re.search(r'd+', view_str).group() return resultdef find_all(item,attr,c): return item.find_all(attr,attrs={'class':c},limit=1)

上边一堆代码下来,着实花费了我不少时间,边写边调试,边百度~~不过还好最终还是出来了。等数据都整理好之后,然后我把它保存到了txt文件里面,以供其他语言来处理。本来想写个put直接put到ElasticSearch中,奈何没成功。后边在试吧,毕竟我的重点只是导数据,不在抓取这里。

import matchimport osimport datetimeimport jsondef writeToTxt(list_name,file_path): try: #这里直接write item 即可,不要自己给序列化在写入,会导致json格式不正确的问题 fp = open(file_path,"w+",encoding='utf-8') l = len(list_name) i = 0 fp.write('[') for item in list_name: fp.write(item) if i1: fp.write('\n') i += 1 fp.write(']') fp.close() except IOError: print("fail to open file")#def getStr(item):# return json.dumps(item).replace(''','"')+'\n'def saveBlogs(): for i in range(1,2): print('request for '+str(i)+'...') blogs = match.blogParser(i,5) #保存到文件 path = createFile() writeToTxt(blogs,path+'/blog_'+ str(i) +'.json') print('第'+ str(i) +'页已经完成') return 'success'def createFile(): date = datetime.datetime.now().strftime('%Y-%m-%d') path = '/'+date if os.path.exists(path): return path else: os.mkdir(path) return pathresult = saveBlogs()print(result)

上边呢,我取了一百页的数据,也就是大概2000条做测试。

成果验收

废了好大劲终于写完那些代码之后呢,就可以享受胜利的果实了,虽然是初学者,代码写的很渣,这参考一下,那参考一下,不过还是有些收获的。运行效果如下:

生成的文件:

文件内容:

总结

一个简单的抓取程序就写完了,python还真是TM的好用。以后有空再研究研究吧。代码行数算上空行和注释总共 100 (50+25+25) 行。凑个整数好看点~~现在认识字我感觉就可以上手写程序了。这里百度一下,那里google一下,问题就解决了,程序也出来了,大功告成。

是时候该和python暂时告别了,继续我的.NET事业。话说上次做rss采集的时候,好多“.NET要完蛋了”,“为什么我们不招.NET” 是什么鬼。 小伙伴们,下次见。

多学点,总不会吃亏的。

最受程序员欢迎的10家IT互联网公司Python薪资大揭秘 互联网视频课程

img

蒋映菱

关注

互联网的发展越来越受到重视,世界五百强企业会出现更多互联网公司。你知道哪家互联网公司最受程序员欢迎吗?

根据IT人才招聘的趋势分析,大家可以看看关于IT从业的数据分析:

在全部招聘职位中,网络游戏和电子商务领域的招聘需求排名前列。此外,作为跨领域的新宠,互联网金融的招聘需求有明显增长,占到全部职位的7.4%。具体数据如下:

对于很多人更为关心的薪酬问题,在全部招聘职位中,企业对于“高级工程师”、“工程师”的招聘需求最大,其对应的平均年薪则分别为31.3万和19.0万。技术人才是企业发展的根本,为了使产品发展得更好,不少企业愿意高薪聘请工程师。

下面,我们来看看最受程序员欢迎的10家互联网公司都招什么Python岗位:

58同城、美团

岗位职责: 1. 负责云数据库/云主机控制平面研发工作 2. 加强平台管理和控制功能,提升资源交付和管理效率

岗位要求:

1. 熟练使用Python,能写出漂亮的Pythonic的代码;

2. 极强的学习能力和动力,对未知技术和领域能快速掌握并实践;

3. 熟练掌握操作系统原理,Internet网络原理;

4. 有云平台开发、自动运维平台开发等大型Python项目经验者优先;

5. 在开源社群活跃并有积极贡献者优先。

奇虎360

职位描述:

支持公司内部安全体系建设

信息安全系统及安全运营工具的开发。

内网流量的分析处理,内部安全的追踪和处理等

任职要求:

1.2年以上Python开发经验,熟悉Django框架开发

2.精通linux系统、熟悉MySQL/MongoDB数据库、网络编程。

3.具有服务器部署及运维经验,熟悉Nginx、Virtualenv、uWSGI等

4.拥有自己通过Google或者StackOverflow解决问题的能力

5.具备良好的分析解决问题能力,能独立承担任务和有系统进度的把控能力。

汽车之家

薪资:15k-25k

职位描述:

该职位主要负责监控平台的架构设计和开发工作,包括但不限于“网络质量和流量分析”,“自动故障定位”,“故障自愈”,“大数据分析”等等方面。

职位要求:

1、本科及以上学历,3年及以上相关领域工作经验;

2、勤于沟通,喜欢协作,懂得如何共识目标,必须有严谨的工作风格;

3、熟悉Python或Golang,熟练使用MySQL/MongoDB/HDFS/HBase/OpenTSDB等数据库或者文件系统,有调优经验者优先;

4、熟悉Zabbix,Open-Falcon原理和使用方法者优先;

5、有高并发、高性能、大数据等应用架构及开发经验者优先;

6、有运维经验者优先;

7、有独立需求分析和方案设计能力者优先。

搜狐畅游

薪资:20k-35k

职位需求: - 统招本科及以上学历,计算机相关专业者优先; - 1年以上Python Web开发工作经验; - 精通Python,至少熟练掌握一款Python Web框架及一款模板引擎; - 熟悉使用Linux/mysql/redis; - 遵循PEP8/DRY/KISS原则编码; - 有Code Review的习惯,注重单元测试,熟悉TDD开发模式更佳; - 良好的学习能力和强烈的进取心、责任心; - 良好的沟通能力及团队合作精神。

加分项:

- 对开源技术有强烈的兴趣和爱好,拥有或参与过github开源项目,向开发者报告过Bug或者贡献过Patch;

- 熟悉I/O multiplex / IOCP编程;

- 在bash/lisp/lua方面有开发经验;

- 熟悉HTML5,在canvas/webGL/css3 animation方面有过实际项目开发经验;

- 熟悉分布式系统设计优先。

完美世界

薪资:15k-35k

工作内容:

1 负责解析HTML文本,结构化数据

2 负责数据清洗工作

3 参与爬虫脚本的开发工作

岗位要求:

1 计算机相关专业,本科以上学历

2 有一年以上相关工作经验

3 熟悉正则表达式、html的基本标签

4 熟悉mongodb,json,熟悉linux常用命令,以及虚拟机

5 熟悉BeautifulSoup优先, 熟悉机器学习算法优先,熟悉 aws 云服务优先

唯品会

薪资:15k-25k

岗位职责:

1、参与公司基于 OpenStack 的 IaaS 平台开发工作;

2、负责云平台服务端模块的开发;

3、解决部署实施过程中出现的问题;

4、能快速满足不断变化的 SaaS/MSS 业务提出的 IaaS 需求、应对大

数据所带来的技术挑战;

5、对业界领先的技术和平台进行研究、测试,并且能够应用在实际

环境中;

任职要求:

1、两年以上云开发(OpenStack)相关研发工作经验;

2、精通 Python 语言;

3、熟悉 REST 接口的开发;

4、熟悉 MySQL 数据库的设计及使用;

5、熟悉高级消息管理协议,如 RabbitMQ、QPID;

6、熟练使用 Linux 系统,熟悉各种 Linux 命令的使用,能够在 Linux

环境下进行开发工作,对虚拟化技术有一定的了解;

7、良好的代码开发风格及开发习惯;

8、熟悉敏捷开发流程;

9、熟练使用 Git 版本控制工具;

10、具备良好的英文资料阅读和理解能力;

11、了解开源项目,有 OpenStack,CloudStack,Hadoop 开发经验优

先。

12、沟通能力,自学能力强,有强烈的求知欲,有独立解决分析、解

决问题的能力,良好的团队合作意识;

小米科技

薪资:15k-25k

工作职责

1.负责内部管理平台的开发和维护

2.负责支撑业务的其他项目的开发和维护

3.编写相应的单元测试

职位要求

1.两年以上 Python 项目开发工作经验,熟悉 Django/Flask 等框架

2.熟悉 MySQL、Redis,能熟练进行数据库设计与优化

3.拥有良好的代码习惯,结构清晰,命名规范,逻辑性强

4.熟练使用 Git,熟悉 Pull Request 工作流

5.熟悉 Python 常用的代码检测工具如:Flake8、Pylint

6.善于思考,能独立分析和解决问题

7.责任心强,具备良好的团队合作精神和承受压力的能力

携程

薪资:15k-25k

Python开发工程师:

1. 负责运维平台设计及开发,实现运维自动化和运维效率的提高 2. 帮助开发团队改进开发流程和效率 3. 与运维团队合作,收集需求,改善运维流程,实现各种运维工具,提高运行维护作业水平 4. 负责网站监控系统、数据收集和数据分析等系统的开发 5. 结合虚拟化技术,打造和完善携程云平台

职位要求: 1. 本科以上学历,计算机相关专业 2. 有较强的沟通协调能力,工作认真细致,良好的团队合作精神,积极主动的工作态度 3. 具备良好的编程习惯,熟悉常用算法和设计模式 4. 熟悉Windows/Linux系统,掌握操作系统基本命令,软件安装方法、配置方法 5. 熟悉Web相关服务和Web开发,熟悉IIS/Apache/Tomcat/NoSQL

以下是加分项:

6. 熟悉大型网站运维工作,有运维开发经验者优先;

7. 有CMDB/monitoring system/agent/automation系统设计与开发经验者优先

8. 熟悉Puppet/Zabbix/Celery/RabbitMQ优先

9. 熟悉Python/Django/Tornaod优先

10. 熟悉前端开发(XHTML/JQuery/CSS)优先

11. 对OpenStack熟悉者优先

优酷土豆

薪资:15k-25k

岗位职责:

1、精通Python,负责网站开发及功能测试,Python功能模块的实现以及相关代码优化,Python系统分析以及通用类库开发,框架编写。

2、负责公司网站的维护和升级,优化完善系统功能;

3、负责网站后台程序以及数据库的运营和维护,能独立完成网站后台运维工作,并不断改进。

岗位要求:

1.熟悉python语言服务端开发,一年以上开发经验。

2.熟悉django/tornado等python框架,有大并发项目经验优先。

3.熟悉redis等缓存技术。

4.熟悉mysql数据库开发与优化。

5.有良好的编程理念和项目架构设计。

6.良好的自我驱动与学习能力。

写在最后

前几天有私信小编要Python的学习资料,小编整理了一些有深度的Python教程和参考资料,从入门到高级的都有,文件已经打包好了,正在学习Python的同学可以下载学习学习。文件下载方式:点击小编头像,关注后私信回复“资料”即可下载。首先把代码撸起来!首先把代码撸起来!首先把代码撸起来!重要的事说三遍,哈哈。“编程是门手艺活”。什么意思?得练啊。

一个小白的转行自学Python的经历 流量视频课程

img

祖元龙

关注

想动手写写自己的经历,希望对更多的像我一样想转行自学的年轻人的一些帮助。和一些鼓励吧。

1. 为什么想换工作

我的大概情况是,本科专业建筑环境与设备工程,16年7月毕业,同学很多去了工地。我的话,受不了工地居无定所,去了制造业。

制造业确实环境不好,虽然我的岗位是研发工程师,但是经常要在车间干体力活车间,累的满头大汗,跟车间的大妈大叔撕逼。

不管是自然环境还是人文环境,只能用恶劣来形容吧。而且我们是单休,动不动就加班,最扯淡的是加班是没有钱的。但凡节假日一般放一天,国企两天,搞笑的是周日值班一天,给32块钱。

看到我们办公室里面三十几岁的男生还没有女朋友,还有即使有女朋友的还在住员工宿舍,而且有的快十年的工作经验,还出国待过,现在月薪不到1w。

想到七八年以后我的生活是这样,我就惶恐不安,我觉得我七八年后不要过这样的生活。

于是决心转行,瞄准IT行业。理由很简单,从业环境好,工作内容没有体力活(ps:相对于体力劳动,我更喜欢脑力劳动),相同的努力下,钱比制造业多,而且现在各个行业都与互联网相关。

2. 如何提前准备

从去年也就是11月开始自学数据分析的一些课程。当时由于没有计算机基础,走了不少弯路,看了一些教程,东拼西凑,感觉乱七八糟。

甚至有一段时间,我不断怀疑自己,放弃大学四年的知识,现在不做传统行业的研发,转身去接触一个新的东西是不是对的?

那段时间,我认识了一些数据分析岗位的在职者,年龄不大。有个同学就建议我先做python开发,再做数据分析,(因为他说数据分析如何如何难,机器学习算法都是大牛玩儿的)我当时犹豫了很久,还自学了Django教程,前端知识,http协议,去熟悉Linux。准备去找python开发的职位(其实我对软件开发不感冒)。

后来,我在“得到” 上看了两篇文章,至今对我很有启发。

第一篇文章《转行》说了以下重点:

1. 寻找一个导师导师可以降低你加入一个新行业的成本,帮助你熟悉环境和行业规则,也会鼓励你完成心理方面的转变。2. 建立新的社交网络过去的人脉关系会阻碍你的转行,因为他们是以过去对你的认知来评价你。新领域的人脉,会给你提供各种各样新的机会和情感支持,帮助你融入。

第二篇文章《职场人终身学习心法》归纳下:

首先,如果想系统地学习,那就建议选择系统的渠道。既然在这个领域你是新手,就不要指望自己能把散落的信息整合成系统了,那是高手要做的事情。要想系统地学习,那就踏踏实实地拿出几个月的时间来,看5本这个领域的经典书,选一门系统课,或者跟着一个系统学习过的老师把这个领域的骨架摸清楚。你又不比别人聪明几倍,却想用几分之一的时间,就掌握人家花了好长时间下了硬功夫,系统掌握的知识,怎么可能呢?先接受一个已经存在的系统,再在上面修修改改,对于新手是最适合的方案。

用3句话来总结一下上面两篇文章:

1. 转行最好有人带、有人指导2. 去认识做大数据这块的人,否则身边的人脉关系会不断否定你,打击你(以及要说服女朋友支持你折腾,如果有的话!)3.系统学习,要几个月,不要贪多,要扎扎实实看书

这样一看,我就明白多了,并且知道该怎么做了。

第一的话,我想转行做数据分析这块的,我过去的背景与此相差太远。现在的话,我只有坚持终身学习,系统学习,要看书,好好啃。

第二的话,你可以加我扣扣一六二二中间四七九最后四三五一起学习,分享我的视频资料给你,不失为一个明智的选择。

当然,上面的建议是建立在你下决心要转行的基础上。先问问自己下面几个问题:

喜欢不喜欢转行后的工作?评估自己转行的优势与劣势?问问自己为什么不待在现在的行业了?自己是不是有很强的自我驱动力?自己是不是能保持终身学习?自己搜集信息和整合信息的能力是不是很强?自己是不是不怕失败?转行失败了,我拿什么保底?

把这些令人焦虑和令人害怕的事情考虑清楚,再去做决定,我要不要转行。这些问题你想清楚了,就清除了学习的道路上的精神障碍。

学习的那段时间,我基本上学习每天3-5小时。我们是单休,周日的话,我陪着女友。(此处撒了狗粮)。其实每个星期也就平均30小时左右。加上在办公室没有事情的情况下,我给工作的电脑装了某些软件,看看东西,用有道云笔记记录。

基本上,这几个月,先后看了《python核心编程》《利用python进行数据分析》《R语言实战》 ,还看了SQL的一些教程,以及一些数据分析师需要的思维。最后面试的时候,掌握的技能,SQL,python,R。会一点简单的爬虫,懂点Linux。

但是但是,每一个我都掌握的很浅,书我都只看了一半。像一些复杂的算法,我还不能深入的理解。

3. 我是这样辞职面试的

自己2月28号辞职流程走完,是直接裸辞了,当时很多人劝我不要冲动,不要裸辞,没想到辞职以后整个神清气爽。

我自己认为不能等完全学好了再去找,到那时候黄花菜都凉了,毕竟世上的事情都没有那么多时间让你去准备好的,而且17届的马上也毕业出来了,到时候再去会更加尴尬。

辞职以后,3月5号来到深圳。密集的面试维持了两周,几乎天天出去面试,还有就是面试的时候,会被打脸的,问一些技术细节,以及没有工作经验。我是很直接就告诉面试官,我就是要转行的,我没有这块的工作经验。

面试主要是两块,一块是考察你的思维,还有一块是考察你的技术细节。期间面试的比较有名的公司有平安银行,ofo,链家网。拿了3个offer。但是其他两个都是大小周加班,我都没有选择。现在的公司是做互联网金融的。

4. 转行后的我是这样的

我之前在制造业,现在出来找工作,特别在意是不是双休,五险一金有没有给我交全(之前公司是没有一金的),节假日是不是正常放假。

现在的话,这个公司制度是,不鼓励员工加班,基本一下班,办公室人几乎走光。我自己也走啦,回来以后继续学习。

每天对着电脑上班,确实比之前的工作累好多。但是还是感觉比之前工作状态好太多。

还有就是未来的领导很重要,我面试时候都会跟领导聊聊,看看领导人咋样,问问公司氛围咋样,这样对自己进入以后就非常有益。

待遇这块是比以前的工作好一些的。考虑到还要在深圳租房子,每个月剩不了多少。但是每天下班回来自己煮饭,吃的很饱,就很开心。周末的话,和女友在一起煮饭。这个周末我俩煮了鸡汤。

自己的话也知道自己水平,虽然已经入职了,但是像自己很菜鸟的,老大让我用python连个数据库,我连了一下午才搞定。还让我用python写个excel数据透视的自动化报表,憋了一天了,我的代码还没出来。现在来看,转行也只是进行了一半,因为后面还要继续学的很多啊。

新公司用的SAS,我现在又开始看SAS了。老大也一直跟我强调,工具只是用来解决问题的,如果你有更好的办法就去尝试,数据分析思维是很重要的。不过我的老大,人非常好,也愿意教我。

后面的路还很长,希望自己一直坚持,一直加油。做一个终身学习者。

关于转行的话,确实很难,可能会交不起房租,像我现在就是穷的一塌糊涂,不过幸好有个女朋友哈哈,没钱了问她要。而且影响因素是多方面的,希望各位要转行的宝宝一定要慎重,想清楚。其次,就是一定要坚持学习,不要怀疑自己,状态要好。

下面这个是以前的工作环境。办公室在旁边的小房子里面。

下面是新公司的办公环境,瞬间觉得转行后生活很美好。没在制造业和工地待过的人是无法体会这种改变的,自然环境和人文环境简直是质的飞跃啊。

转行以后的生活

生活在于等待。有时候幸福可能会晚点到来, 未来越来越好,用知识赚钱,我们一路同行,你并不孤单。

欢迎评论!!!!

一起交流!!!!

一起学习!!!!

Python那些事——一个Python小白5个小时爬虫经历 营销视频课程

img

丹寒

关注

前言

最近业余在做一个基于.NET Core的搜索项目,奈何基层代码写好了,没有看起来很华丽的数据供测试。很巧的也是博客搜索,于是乎想到了博客园。C#也能做做页面数据抓取的,不过在博客园看到的大部分都是python实现,所以就临时想了一下看看python到底是什么东东,不看基础语法,不看语言功能,直接上代码,哪里不会搜哪里。代码完成总共用时大概4个小时,其中搭建环境加安装BeautifulSoup大概1个小时。解析HTML用时间最多了,边看demo边解析,大概2个小时,剩下的时间就是调试加保存数据了。

环境搭建

既然用python,那么自然少不了语言环境。于是乎到官网下载了3.5版本的。安装完之后,随机选择了一个编辑器叫PyCharm,话说python编辑器还真挺多的。由于本人是小白,所以安装事项不在过多赘述。

建好项目,打开编辑器,直接开工。本来之前用C#写的时候,大体思路就是获取网页内容,然后正则匹配。后来发现网上的帖子也很多。不过在搜索过程中发现,不建议用正则来匹配HTML。有正好我的正则不太好,所以我就搜了一下HTML解析工具,果不其然,人家都做好了,直接拿来用吧。没错就是这个东东:BeautifulSoup 。安装也很简单,不过中间出了个小插曲,就是bs4没有。继续搜,然后需要用pip安装一下就好了。(当然我并不知道ps4和pip是什么鬼)

思路分析

博客吗,我当然就对准了博客园,于是乎,进入博客园首页,查看请求。  

发送请求

当然我不知道python是怎么进行网络请求的,其中还有什么2.0和3.0的不同,中间曲曲折折了不少,最终还是写出了最简单的一段请求代码。  

import urllib.parseimport urllib.request# params CategoryId=808 CategoryType=SiteHome ItemListActionName=PostList PageIndex=3 ParentCategoryId=0 TotalPostCount=4000def getHtml(url,values): user_agent='Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36' headers = {'User-Agent':user_agent} data = urllib.parse.urlencode(values) response_result = urllib.request.urlopen(url+'?'+data).read() html = response_result.decode('utf-8') return html#获取数据def requestCnblogs(index): print('请求数据') url = 'http://cnblogs/mvc/AggSite/PostList.aspx' value= { 'CategoryId':808, 'CategoryType' : 'SiteHome', 'ItemListActionName' :'PostList', 'PageIndex' : index, 'ParentCategoryId' : 0, 'TotalPostCount' : 4000 } result = getHtml(url,value) return result

其实博客园这个请求还是挺标准的,哈哈正好适合抓取。因为他返回的就是一段html。(如果返回json那不是更好。。。。)

数据解析

上文已经提到了,用到的是BeautifulSoup,好处就是不用自己写正则,只要根据他的语法来写就好了,在多次的测试之后终于完成了数据的解析。先上一段HTML。然后在对应下面的代码,也许看起来更轻松一些。

1

Python 字符串格式化

src="//picblogs/face/795666/20160421231717.png" alt="" />

转载请注明出处 Python2.6+ 增加了str.format函数,用来代替原有的'%'操作符

。它使用比'%'更加直观、灵活。下面详细介绍一下它的使用方法。 下面是使用'%'的例子: 格式很像C语言的printf是不是?由于'%'是一个操作符,只能在左右

两边各放一个参数,因此右边多个值需要用元组或 ...

新月的力量_141

发布于 2017-02-19 23:07

评论(0)

阅读

(138)

通过上文的HTML代码可以看到几点。首先每一条数据都在 p(class=”post_item”)下。然后 p(“post_item_body”)下有用户信息,标题,链接,简介等信息。逐一根据样式解析即可。代码如下:

from bs4 import BeautifulSoupimport requestimport re#解析最外层def blogParser(index): cnblogs = request.requestCnblogs(index) soup = BeautifulSoup(cnblogs, 'html.parser') all_p = soup.find_all('p', attrs={'class': 'post_item_body'}, limit=20) blogs = [] #循环p获取详细信息 for item in all_p: blog = analyzeBlog(item) blogs.append(blog) return blogs#解析每一条数据def analyzeBlog(item): result = {} a_title = find_all(item,'a','titlelnk') if a_title is not None: # 博客标题 result["title"] = a_title[0].string # 博客链接 result["href"] = a_title[0]['href'] p_summary = find_all(item,'p','post_item_summary') if p_summary is not None: # 简介 result["summary"] = p_summary[0].text footers = find_all(item,'p','post_item_foot') footer = footers[0] # 作者 result["author"] = footer.a.string # 作者url result["author_url"] = footer.a['href'] str = footer.text time = re.findall(r"发布于 .+? .+? ", str) result["create_time"] = time[0].replace('发布于 ','') comment_str = find_all(footer,'span','article_comment')[0].a.string result["comment_num"] = re.search(r'd+', comment_str).group() view_str = find_all(footer,'span','article_view')[0].a.string result["view_num"] = re.search(r'd+', view_str).group() return resultdef find_all(item,attr,c): return item.find_all(attr,attrs={'class':c},limit=1)

上边一堆代码下来,着实花费了我不少时间,边写边调试,边百度~~不过还好最终还是出来了。等数据都整理好之后,然后我把它保存到了txt文件里面,以供其他语言来处理。本来想写个put直接put到ElasticSearch中,奈何没成功。后边在试吧,毕竟我的重点只是导数据,不在抓取这里。

import matchimport osimport datetimeimport jsondef writeToTxt(list_name,file_path): try: #这里直接write item 即可,不要自己给序列化在写入,会导致json格式不正确的问题 fp = open(file_path,"w+",encoding='utf-8') l = len(list_name) i = 0 fp.write('[') for item in list_name: fp.write(item) if i1: fp.write('\n') i += 1 fp.write(']') fp.close() except IOError: print("fail to open file")#def getStr(item):# return json.dumps(item).replace(''','"')+'\n'def saveBlogs(): for i in range(1,2): print('request for '+str(i)+'...') blogs = match.blogParser(i,5) #保存到文件 path = createFile() writeToTxt(blogs,path+'/blog_'+ str(i) +'.json') print('第'+ str(i) +'页已经完成') return 'success'def createFile(): date = datetime.datetime.now().strftime('%Y-%m-%d') path = '/'+date if os.path.exists(path): return path else: os.mkdir(path) return pathresult = saveBlogs()print(result)

上边呢,我取了一百页的数据,也就是大概2000条做测试。

成果验收

废了好大劲终于写完那些代码之后呢,就可以享受胜利的果实了,虽然是初学者,代码写的很渣,这参考一下,那参考一下,不过还是有些收获的。运行效果如下:

生成的文件:

文件内容:

总结

一个简单的抓取程序就写完了,python还真是TM的好用。以后有空再研究研究吧。代码行数算上空行和注释总共 100 (50+25+25) 行。凑个整数好看点~~现在认识字我感觉就可以上手写程序了。这里百度一下,那里google一下,问题就解决了,程序也出来了,大功告成。

是时候该和python暂时告别了,继续我的.NET事业。话说上次做rss采集的时候,好多“.NET要完蛋了”,“为什么我们不招.NET” 是什么鬼。 小伙伴们,下次见。

多学点,总不会吃亏的。

最受程序员欢迎的10家IT互联网公司Python薪资大揭秘 互联网视频课程

img

蒋芷文

关注

互联网的发展越来越受到重视,世界五百强企业会出现更多互联网公司。你知道哪家互联网公司最受程序员欢迎吗?

根据IT人才招聘的趋势分析,大家可以看看关于IT从业的数据分析:

在全部招聘职位中,网络游戏和电子商务领域的招聘需求排名前列。此外,作为跨领域的新宠,互联网金融的招聘需求有明显增长,占到全部职位的7.4%。具体数据如下:

对于很多人更为关心的薪酬问题,在全部招聘职位中,企业对于“高级工程师”、“工程师”的招聘需求最大,其对应的平均年薪则分别为31.3万和19.0万。技术人才是企业发展的根本,为了使产品发展得更好,不少企业愿意高薪聘请工程师。

下面,我们来看看最受程序员欢迎的10家互联网公司都招什么Python岗位:

58同城、美团

岗位职责: 1. 负责云数据库/云主机控制平面研发工作 2. 加强平台管理和控制功能,提升资源交付和管理效率

岗位要求:

1. 熟练使用Python,能写出漂亮的Pythonic的代码;

2. 极强的学习能力和动力,对未知技术和领域能快速掌握并实践;

3. 熟练掌握操作系统原理,Internet网络原理;

4. 有云平台开发、自动运维平台开发等大型Python项目经验者优先;

5. 在开源社群活跃并有积极贡献者优先。

奇虎360

职位描述:

支持公司内部安全体系建设

信息安全系统及安全运营工具的开发。

内网流量的分析处理,内部安全的追踪和处理等

任职要求:

1.2年以上Python开发经验,熟悉Django框架开发

2.精通linux系统、熟悉MySQL/MongoDB数据库、网络编程。

3.具有服务器部署及运维经验,熟悉Nginx、Virtualenv、uWSGI等

4.拥有自己通过Google或者StackOverflow解决问题的能力

5.具备良好的分析解决问题能力,能独立承担任务和有系统进度的把控能力。

汽车之家

薪资:15k-25k

职位描述:

该职位主要负责监控平台的架构设计和开发工作,包括但不限于“网络质量和流量分析”,“自动故障定位”,“故障自愈”,“大数据分析”等等方面。

职位要求:

1、本科及以上学历,3年及以上相关领域工作经验;

2、勤于沟通,喜欢协作,懂得如何共识目标,必须有严谨的工作风格;

3、熟悉Python或Golang,熟练使用MySQL/MongoDB/HDFS/HBase/OpenTSDB等数据库或者文件系统,有调优经验者优先;

4、熟悉Zabbix,Open-Falcon原理和使用方法者优先;

5、有高并发、高性能、大数据等应用架构及开发经验者优先;

6、有运维经验者优先;

7、有独立需求分析和方案设计能力者优先。

搜狐畅游

薪资:20k-35k

职位需求: - 统招本科及以上学历,计算机相关专业者优先; - 1年以上Python Web开发工作经验; - 精通Python,至少熟练掌握一款Python Web框架及一款模板引擎; - 熟悉使用Linux/mysql/redis; - 遵循PEP8/DRY/KISS原则编码; - 有Code Review的习惯,注重单元测试,熟悉TDD开发模式更佳; - 良好的学习能力和强烈的进取心、责任心; - 良好的沟通能力及团队合作精神。

加分项:

- 对开源技术有强烈的兴趣和爱好,拥有或参与过github开源项目,向开发者报告过Bug或者贡献过Patch;

- 熟悉I/O multiplex / IOCP编程;

- 在bash/lisp/lua方面有开发经验;

- 熟悉HTML5,在canvas/webGL/css3 animation方面有过实际项目开发经验;

- 熟悉分布式系统设计优先。

完美世界

薪资:15k-35k

工作内容:

1 负责解析HTML文本,结构化数据

2 负责数据清洗工作

3 参与爬虫脚本的开发工作

岗位要求:

1 计算机相关专业,本科以上学历

2 有一年以上相关工作经验

3 熟悉正则表达式、html的基本标签

4 熟悉mongodb,json,熟悉linux常用命令,以及虚拟机

5 熟悉BeautifulSoup优先, 熟悉机器学习算法优先,熟悉 aws 云服务优先

唯品会

薪资:15k-25k

岗位职责:

1、参与公司基于 OpenStack 的 IaaS 平台开发工作;

2、负责云平台服务端模块的开发;

3、解决部署实施过程中出现的问题;

4、能快速满足不断变化的 SaaS/MSS 业务提出的 IaaS 需求、应对大

数据所带来的技术挑战;

5、对业界领先的技术和平台进行研究、测试,并且能够应用在实际

环境中;

任职要求:

1、两年以上云开发(OpenStack)相关研发工作经验;

2、精通 Python 语言;

3、熟悉 REST 接口的开发;

4、熟悉 MySQL 数据库的设计及使用;

5、熟悉高级消息管理协议,如 RabbitMQ、QPID;

6、熟练使用 Linux 系统,熟悉各种 Linux 命令的使用,能够在 Linux

环境下进行开发工作,对虚拟化技术有一定的了解;

7、良好的代码开发风格及开发习惯;

8、熟悉敏捷开发流程;

9、熟练使用 Git 版本控制工具;

10、具备良好的英文资料阅读和理解能力;

11、了解开源项目,有 OpenStack,CloudStack,Hadoop 开发经验优

先。

12、沟通能力,自学能力强,有强烈的求知欲,有独立解决分析、解

决问题的能力,良好的团队合作意识;

小米科技

薪资:15k-25k

工作职责

1.负责内部管理平台的开发和维护

2.负责支撑业务的其他项目的开发和维护

3.编写相应的单元测试

职位要求

1.两年以上 Python 项目开发工作经验,熟悉 Django/Flask 等框架

2.熟悉 MySQL、Redis,能熟练进行数据库设计与优化

3.拥有良好的代码习惯,结构清晰,命名规范,逻辑性强

4.熟练使用 Git,熟悉 Pull Request 工作流

5.熟悉 Python 常用的代码检测工具如:Flake8、Pylint

6.善于思考,能独立分析和解决问题

7.责任心强,具备良好的团队合作精神和承受压力的能力

携程

薪资:15k-25k

Python开发工程师:

1. 负责运维平台设计及开发,实现运维自动化和运维效率的提高 2. 帮助开发团队改进开发流程和效率 3. 与运维团队合作,收集需求,改善运维流程,实现各种运维工具,提高运行维护作业水平 4. 负责网站监控系统、数据收集和数据分析等系统的开发 5. 结合虚拟化技术,打造和完善携程云平台

职位要求: 1. 本科以上学历,计算机相关专业 2. 有较强的沟通协调能力,工作认真细致,良好的团队合作精神,积极主动的工作态度 3. 具备良好的编程习惯,熟悉常用算法和设计模式 4. 熟悉Windows/Linux系统,掌握操作系统基本命令,软件安装方法、配置方法 5. 熟悉Web相关服务和Web开发,熟悉IIS/Apache/Tomcat/NoSQL

以下是加分项:

6. 熟悉大型网站运维工作,有运维开发经验者优先;

7. 有CMDB/monitoring system/agent/automation系统设计与开发经验者优先

8. 熟悉Puppet/Zabbix/Celery/RabbitMQ优先

9. 熟悉Python/Django/Tornaod优先

10. 熟悉前端开发(XHTML/JQuery/CSS)优先

11. 对OpenStack熟悉者优先

优酷土豆

薪资:15k-25k

岗位职责:

1、精通Python,负责网站开发及功能测试,Python功能模块的实现以及相关代码优化,Python系统分析以及通用类库开发,框架编写。

2、负责公司网站的维护和升级,优化完善系统功能;

3、负责网站后台程序以及数据库的运营和维护,能独立完成网站后台运维工作,并不断改进。

岗位要求:

1.熟悉python语言服务端开发,一年以上开发经验。

2.熟悉django/tornado等python框架,有大并发项目经验优先。

3.熟悉redis等缓存技术。

4.熟悉mysql数据库开发与优化。

5.有良好的编程理念和项目架构设计。

6.良好的自我驱动与学习能力。

写在最后

前几天有私信小编要Python的学习资料,小编整理了一些有深度的Python教程和参考资料,从入门到高级的都有,文件已经打包好了,正在学习Python的同学可以下载学习学习。文件下载方式:点击小编头像,关注后私信回复“资料”即可下载。首先把代码撸起来!首先把代码撸起来!首先把代码撸起来!重要的事说三遍,哈哈。“编程是门手艺活”。什么意思?得练啊。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP