xpath div text怎么抓取<div>下的所有<p>标签的文字

&figure&&img src=&https://pic7.zhimg.com/v2-69faec9c4fb409df09d261c5e2b748b5_b.jpg& data-rawwidth=&489& data-rawheight=&291& class=&origin_image zh-lightbox-thumb& width=&489& data-original=&https://pic7.zhimg.com/v2-69faec9c4fb409df09d261c5e2b748b5_r.jpg&&&/figure&&p&正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。&/p&&p&正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/;
var r = fieldValue.match(reg);
if(r==null)alert('Date format error!');
&/code&&/pre&&/div&&p&下面是&b&技匠&/b&整理的,在前端开发中经常使用到的&b&20&/b&个正则表达式。&/p&&p&&b&1 . 校验密码强度&/b&&/p&&p&密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
&/code&&/pre&&/div&&p&&b&2. 校验中文&/b&&/p&&p&字符串仅能是中文。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^[\\u4e00-\\u9fa5]{0,}$
&/code&&/pre&&/div&&p&&b&3. 由数字、26个英文字母或下划线组成的字符串&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^\\w+$
&/code&&/pre&&/div&&p&&b&4. 校验E-Mail 地址&/b&&/p&&p&同密码一样,下面是E-mail地址合规性的正则检查语句。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?
&/code&&/pre&&/div&&p&&b&5. 校验身份证号码&/b&&/p&&p&下面是身份证号码的正则校验。15 或 18位。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&15位:
^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$
^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$
&/code&&/pre&&/div&&p&&b&6. 校验日期&/b&&/p&&p&“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^(?:(?!]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[1])-31)|(?:[0-9]{2}(?:0[48]|[]|[13579][26])|(?:0[48]|[]|[1)-02-29)$
&/code&&/pre&&/div&&p&&b&7. 校验金额&/b&&/p&&p&金额校验,精确到2位小数。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^[0-9]+(.[0-9]{2})?$
&/code&&/pre&&/div&&p&&b&8. 校验手机号&/b&&/p&&p&下面是国内 13、15、18开头的手机号正则表达式。(可根据目前国内收集号扩展前两位开头号码)&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$
&/code&&/pre&&/div&&p&&b&9. 判断IE的版本&/b&&/p&&p&IE目前还没被完全取代,很多页面还是需要做版本兼容,下面是IE版本检查的表达式。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$
&/code&&/pre&&/div&&p&&b&10. 校验IP-v4地址&/b&&/p&&p&IP4 正则语句。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b
&/code&&/pre&&/div&&p&&b&11. 校验IP-v6地址&/b&&/p&&p&IP6 正则语句。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))
&/code&&/pre&&/div&&p&&b&12. 检查URL的前缀&/b&&/p&&p&应用开发中很多时候需要区分请求是HTTPS还是HTTP,通过下面的表达式可以取出一个url的前缀然后再逻辑判断。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&if (!s.match(/^[a-zA-Z]+:\\/\\//))
s = 'http://' +
&/code&&/pre&&/div&&p&&b&13. 提取URL链接&/b&&/p&&p&下面的这个表达式可以筛选出一段文本中的URL。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?
&/code&&/pre&&/div&&p&&b&14. 文件路径及扩展名校验&/b&&/p&&p&验证windows下文件路径和扩展名(下面的例子中为.txt文件) &/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?&&&|]+\\.txt(l)?$
&/code&&/pre&&/div&&p&&b&15. 提取Color Hex
Codes&/b&&/p&&p&有时需要抽取网页中的颜色代码,可以使用下面的表达式。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
&/code&&/pre&&/div&&p&&b&16. 提取网页图片&/b&&/p&&p&假若你想提取网页中所有图片信息,可以利用下面的表达式。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&\\& *[img][^\\\\&]*[src] *= *[\\&\\']{0,1}([^\\&\\'\\ &]*)
&/code&&/pre&&/div&&p&&b&17. 提取页面超链接&/b&&/p&&p&提取html中的超链接。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(&a\\s*(?!.*\\brel=)[^&]*)(href=&https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^&]+)&((?!.*\\brel=)[^&]*)(?:[^&]*)&
&/code&&/pre&&/div&&p&&b&18. 查找CSS属性&/b&&/p&&p&通过下面的表达式,可以搜索到相匹配的CSS属性。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}
&/code&&/pre&&/div&&p&&b&19. 抽取注释&/b&&/p&&p&如果你需要移除HMTL中的注释,可以使用如下的表达式。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&!--(.*?)--&
&/code&&/pre&&/div&&p&&b&20. 匹配HTML标签&/b&&/p&&p&通过下面的表达式可以匹配出HTML中的标签属性。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&\\/?\\w+((\\s+\\w+(\\s*=\\s*(?:&.*?&|'.*?'|[\\^'&&\\s]+))?)+\\s*|\\s*)\\/?&
&/code&&/pre&&/div&&h2&&b&正则表达式的相关语法&/b&&/h2&&p&下面是我找到的一张非常不错的正则表达式 Cheat Sheet,可以用来快速查找相关语法。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-2f43be36dd2dd45848e28ddfe430f333_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1024& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&https://pic1.zhimg.com/v2-2f43be36dd2dd45848e28ddfe430f333_r.jpg&&&/figure&&h2&&b&学习正则表达式&/b&&/h2&&p&我在网上看到了一篇相当不错的正则表达式&a href=&https://link.zhihu.com/?target=https%3A//msdn.microsoft.com/en-us/library/az24scfc%28v%3Dvs.110%29.aspx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&快速学习指南&/a&,有兴趣继续深入学习的同学可以参考。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-99cdd76a777a8a2b3767cbe3566dc45c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&705& data-rawheight=&413& class=&origin_image zh-lightbox-thumb& width=&705& data-original=&https://pic4.zhimg.com/v2-99cdd76a777a8a2b3767cbe3566dc45c_r.jpg&&&/figure&&h2&&b&正则表达式在线测试工具&/b&&/h2&&p&&a href=&https://link.zhihu.com/?target=https%3A//regex101.com/%23javascript& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&regex101&/a&是一个非常不错的正则表达式在线测试工具,你可以直接在线测试你的正则表达式哦。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0c8bf3fc322f9824b0cbd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&746& data-rawheight=&423& class=&origin_image zh-lightbox-thumb& width=&746& data-original=&https://pic4.zhimg.com/v2-0c8bf3fc322f9824b0cbd_r.jpg&&&/figure&&p&另外,我也网上找到几本不错的正则表达式方面的教程和书籍,并将它们分享到了&a href=&https://zhuanlan.zhihu.com/p//jijiangshe.com& class=&internal&&技匠社jijiangshe.com&/a&,如果你有兴趣学习欢迎访问获取。^_^&/p&&p&作者:技匠&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.jianshu.com/p/e7bb& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jianshu.com/p/e7bb97218&/span&&span class=&invisible&&946&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&——————————————————————————————————————&/p&&p&你想更深入了解学习Python知识体系,你可以看一下我们花费了一个多月整理了上百小时的几百个知识点体系内容:&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.magedu.com/73198.html%3FPython_wenzhang_zhihu_jinke_zhidaozhe20gezhengzebiaodashinengrangnishaoxie1000hangdaima_& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【超全整理】《Python自动化全能开发从入门到精通》笔记全放送&/a&&/p&
正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基…
&figure&&img src=&https://pic1.zhimg.com/v2-fa2d5182fff0bb29ed9b05f_b.jpg& data-rawwidth=&2049& data-rawheight=&957& class=&origin_image zh-lightbox-thumb& width=&2049& data-original=&https://pic1.zhimg.com/v2-fa2d5182fff0bb29ed9b05f_r.jpg&&&/figure&&p&----------------------------------------------- 更新------------------------------------------------&br&&/p&&h2&写在前面&/h2&&p&本文写于一个月前,由于当时两次申请知乎专栏都没有成功,于是先首发于简书:《&a href=&https://link.zhihu.com/?target=http%3A//www.jianshu.com/p/230ca4fcae14& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&爬取张佳玮138w+知乎关注者:数据可视化&/a&》,并以文章的形式发在知乎,没多少人看到。前几天在@量子数据
写的《50行python爬虫代码, 带你正确打开知乎新世界!》下面留言提到了我的文章,才算多了几十人点赞,于是带着几篇作品重新申请专栏终于成功,接下来会陆续将几篇文章搬运进来。&/p&&h2&声明&/h2&&p&本文首发于简书,转载需告知,并标明作者和出处。本项目仅为个人练手,若有冒犯张公子或其他人之处,在此先致以歉意,爬取的数据不做公开。另外已过去一个月,关注张公子的人数已变为141w+,很多数据也都有所变化,请批判性地看待可视化结果。&/p&&h2&一、前言&/h2&&p&作为本专栏第一篇文章,先介绍下小背景,即为什么爬知乎第一大V张公子的138w+关注者信息?&br&&/p&&p&其实之前也写过不少小爬虫,按照网上各种教程实例去练手,“不可避免”的爬过妹子图、爬过豆瓣Top250电影等等;也基于自身的想法,在浙大120周年校庆前,听闻北美帝国大厦首次给大陆学校亮灯,于是爬取&a href=&tel:&&&/a&年官网上每日的亮灯图并用python的PIL库做了几个小logo,算是一名吃瓜群众自发的庆贺行为;(更多照片见于:&a href=&https://link.zhihu.com/?target=https%3A//www.douban.com/photos/photo//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Deserts-X 我的相册-北美帝国大厦亮灯图:ZJU_120 logo&/a&)&/p&&figure&&img src=&https://pic3.zhimg.com/v2-e5b205da88_b.jpg& data-caption=&& data-rawwidth=&7000& data-rawheight=&7000& class=&origin_image zh-lightbox-thumb& width=&7000& data-original=&https://pic3.zhimg.com/v2-e5b205da88_r.jpg&&&/figure&&p&&br&&/p&&p&也因为喜欢鲁迅的作品,爬过在线鲁迅全集的全部文章标题和链接;另外听说太祖的某卷书是禁书,于是顺带也爬了遍毛选;还帮老同学在某票据网站下线前爬了大部分机构、人员信息,说是蛮值钱,然而也还在留着落灰......&/p&&figure&&img src=&https://pic1.zhimg.com/v2-3d578e7db0b222deadc701_b.jpg& data-caption=&& data-rawwidth=&707& data-rawheight=&568& class=&origin_image zh-lightbox-thumb& width=&707& data-original=&https://pic1.zhimg.com/v2-3d578e7db0b222deadc701_r.jpg&&&/figure&&p&再是知道&b&百度Echarts&/b&开源的可视化网站里面的图很酷炫,比如使我着迷的:&a href=&https://link.zhihu.com/?target=http%3A//echarts.baidu.com/demo.html%23scatter-weibo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&微博签到数据点亮中国&/a&,于是想着可以爬取微博大明星、小鲜肉的粉丝的居住地,然后搞搞怎么画出全国乃至全球分布情况。但发现几年前微博就限制只能查看200左右粉丝数(具体忘了),蛮扫兴的,于是将目光转向了知乎......&/p&&p&而既然要爬,那就爬关注人数最多的张公子吧,数据量也大,这方面是之前小项目所不及的,此前也看过不少爬知乎数据与分析的文章,因此也想练练手,看看大量访问与获取数据时会不会遇到什么封IP的反爬措施,以及数据可视化能搞成什么样。&/p&&p&不过此文在爬虫部分不做过多展开,看情况后续再另写一文。思路如下:抓包获取张佳玮主页&b&&a href=&https://www.zhihu.com/api/v4/members/zhang-jia-wei/followers?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=20&limit=20& class=&internal&&关注者api&/a&&/b&,然后改变网址中offset参数为20的倍数,一直翻页直到获取138w+关注者信息,其中返回的json数据主要有:关注者的昵称、主页id(即url_token)、性别、签名、被关注人数等,也就是说需要访问所有主页id,才能获取更多信息(&b&&a href=&https://www.zhihu.com/api/v4/members/jixin?include=locations%2Cemployments%2Cgender%2Ceducations%2Cbusiness%2Cvoteup_count%2Cthanked_Count%2Cfollower_count%2Cfollowing_count%2Ccover_url%2Cfollowing_topic_count%2Cfollowing_question_count%2Cfollowing_favlists_count%2Cfollowing_columns_count%2Cavatar_hue%2Canswer_count%2Carticles_count%2Cpins_count%2Cquestion_count%2Ccolumns_count%2Ccommercial_question_count%2Cfavorite_count%2Cfavorited_count%2Clogs_count%2Cmarked_answers_count%2Cmarked_answers_text%2Cmessage_thread_token%2Caccount_status%2Cis_active%2Cis_force_renamed%2Cis_bind_sina%2Csina_weibo_url%2Csina_weibo_name%2Cshow_sina_weibo%2Cis_blocking%2Cis_blocked%2Cis_following%2Cis_followed%2Cmutual_followees_count%2Cvote_to_count%2Cvote_from_count%2Cthank_to_count%2Cthank_from_count%2Cthanked_count%2Cdescription%2Chosted_live_count%2Cparticipated_live_count%2Callow_message%2Cindustry_category%2Corg_name%2Corg_homepage%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics& class=&internal&&个人主页api:以黄继新为例&/a&&/b&):居住地、所在行业、职业经历、教育经历、获赞数、感谢数、收藏数等等。鉴于还不怎么会多进程爬取,如果把所有id再爬一遍会非常耗时间,于是&b&筛选被关注数100+的id&/b&,发现只剩了&b&4.1w+&/b&,之后较完整提取了这部分的信息,后续可视化也多基于此。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-4e93aeada02f8_b.jpg& data-caption=&& data-rawwidth=&1366& data-rawheight=&728& class=&origin_image zh-lightbox-thumb& width=&1366& data-original=&https://pic1.zhimg.com/v2-4e93aeada02f8_r.jpg&&&/figure&&p&&br&&/p&&h2&二、数据可视化&/h2&&h2&1、关注人数&/h2&&p&大V总是少数的,而小透明到底有多少、分布情况如何呢?将关注人数划分成不同区间,绘制成如下金字塔图:&br&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-928c304ef04f53c596771_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&519& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/v2-928c304ef04f53c596771_r.jpg&&&/figure&&p&作为一只小透明,在此过程中发现自己处于前2w的位置,即图中红色区域,还是蛮吃惊的。上文已提到100+关注就超过了134w的用户,而1k+、1w+、10w+就越来越接近塔尖,越来越接近张公子的所在,看上图10w+以上的区域,如同高耸入云,渺然不可见,“乱山合沓,空翠爽肌,寂无人行,止有鸟道”,令小透明很是神往。&/p&&p&&b&上升之路虽然崎岖,但也同样说明只要多增几个关注,就胜过了数以万计的用户&/b&,这对于有志于成为大V的人,或许能在艰难的前行之路上,靠此数据透露的信息,拾得些许信心。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b55f384cb929e182bd3c48_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&568& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/v2-b55f384cb929e182bd3c48_r.jpg&&&/figure&&p&细看底部的区间,0关注有40.2w+,1-10关注有76.6w+,区分度已赫然形成,但小透明可能感受不出,那怕有几百的关注,何尝不会觉得自己依旧是个小透明呢?有谁会相信斩获10人关注,就超过了100w+的用户,数据能告知人经验之外的事实,在此可见一斑。当然知乎大量用户涌入且多数人并不产生优质或有趣的回答,也是一二原因。&/p&&p&继续看100+以上的数据,底部占比依旧明显,塔尖依然很小。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-83811add8cf_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&568& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/v2-83811add8cf_r.jpg&&&/figure&&h2&2、性别情况&/h2&&p&接着对100+关注人群的性别组成进行分析,发现男女比例基本维持在2:1,与138w+用户的男女比例差别不大。当然10w+关注由于人数较少,比例超过3:1,是否能得出男性在这方面更为优秀就不得而知了。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ecc10fbb8cd25_b.jpg& data-caption=&& data-rawwidth=&827& data-rawheight=&378& class=&origin_image zh-lightbox-thumb& width=&827& data-original=&https://pic3.zhimg.com/v2-ecc10fbb8cd25_r.jpg&&&/figure&&h2&3、10w+大V&/h2&&p&前文已多次提到10w+大V,那么这190人里到底都有谁呢?这里以关注人数为权重,生成词云如下:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-fa2d5182fff0bb29ed9b05f_b.jpg& data-caption=&& data-rawwidth=&2049& data-rawheight=&957& class=&origin_image zh-lightbox-thumb& width=&2049& data-original=&https://pic1.zhimg.com/v2-fa2d5182fff0bb29ed9b05f_r.jpg&&&/figure&&p&&br&&/p&&p&大家上知乎的话应该也有关注一些大V,许多名字应该并不陌生,比如马伯庸、动机在杭州、葛巾、朱炫、丁香医生等等,当然也会发现并不是所有大V都关注了张公子,哪怕他是知乎第一人,目前已交出了3026个回答,135个知乎收录回答的傲人成绩(据说也是豆瓣和虎扑第一人)。&br&&/p&&h2&4、居住地分布&/h2&&p&终于到了我最初开始这个项目时,最想获取的的信息了。虽然由于爬取效率而筛选掉了100关注以下的id共134w,数据量方面不如标题所示的那么多,略有遗憾,但其实真的拿到4.1w+条较优质数据时,发现处理起来也并不容易。&/p&&p&比如这里的居住地信息,有乱填水星、火星、那美克星,也有填国家、省份、县市、街道格式不一的,还有诸如老和山之类外行人不明白的“哑谜”等等,数据之脏令人头疼,且纯文本的数据又不像数字类可以筛选、排序,还没想到好的方式应对。再者Echarts官网虽然有不少可以套用的模板,但有很多地方的经纬度需要重新获取,这样就在数据处理和地图上定位有两处难题需要解决。&/p&&p&由于第一次处理这类数据并可视化,第一次用Echarts就打算画这个酷炫的地图,因此最终先缩小数据量,还是以1w+大V的数据来可视化,目前先完成国内分布情况,以后看情况再扩大数据量和绘制全球分布情况。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-079ffc608e402dfd7c07_b.jpg& data-caption=&& data-rawwidth=&799& data-rawheight=&509& class=&origin_image zh-lightbox-thumb& width=&799& data-original=&https://pic3.zhimg.com/v2-079ffc608e402dfd7c07_r.jpg&&&/figure&&p&其中出现次数排名前几的城市依次为:北京 360,上海 183,深圳 55,杭州 52,广州 47,成都 26,南京 20......应该算是意料之中的。考虑到并不是每个人对这些点所代表的城市都熟悉,加上城市名,效果如下,重叠较为严重,显示效果不够好,仍需解决。&/p&&figure&&img src=&https://pic7.zhimg.com/v2-b689bbaccf9_b.jpg& data-caption=&& data-rawwidth=&799& data-rawheight=&509& class=&origin_image zh-lightbox-thumb& width=&799& data-original=&https://pic7.zhimg.com/v2-b689bbaccf9_r.jpg&&&/figure&&p&&br&&/p&&h2&5、Top20 系列&/h2&&p&接下来分别对所在行业、职业经历、教育经历等进行分析,结果如下(注:用户有多条职业经历或教育经历的,仅爬取了最新的一条数据):&/p&&figure&&img src=&https://pic1.zhimg.com/v2-d1eab3d90f_b.jpg& data-caption=&& data-rawwidth=&900& data-rawheight=&509& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic1.zhimg.com/v2-d1eab3d90f_r.jpg&&&/figure&&p&学校方面几乎全为985、211高校,当然拿得出手的会乐于写上,略微差些的可能不会填写,而且涌入用户多了后,这类数据也就只是调侃知乎人人都是985高校,年薪百万的点了。所在行业方面,互联网遥遥领先,计算机软件、金融、高等教育位居前四。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-96a06ac64d1a15fe215e5c55e4af2d34_b.jpg& data-caption=&& data-rawwidth=&900& data-rawheight=&509& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic4.zhimg.com/v2-96a06ac64d1a15fe215e5c55e4af2d34_r.jpg&&&/figure&&p&Top20 公司中BAT、网易、华为、小米科技、美团网以及谷歌、Facebook、微软等大厂都悉数在列。再看Top20 职业里除了各种名号的程序员、产品经理、运营等互联网职业,创始人、CEO等占据前排,不可谓不令人大惊从早到晚失色。&/p&&h2&6、认证信息&/h2&&p&原本只知道博士可以提供信息得到认证,知乎也会给予其回答更好的显示途径,使其更容易成长为大V,以此作为对高学历人群、优质用户的奖励。&/p&&p&此次抓取的100+关注4.1w+条数据中有208条认证信息。除却各种专业的博士、博士后外,还有37家公司、机构,9条医师,11条教授/讲师/研究员,13条CFA、CPA持证人或工程师、建筑师,以及28条其他类:副总裁、创始人、记者、律师、WCG魔兽争霸项目世界冠军、职业自行车手、主持人、作家、歌手等等。看来还是有不少优质用户可以后续去了解下的。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-cbf_b.jpg& data-caption=&& data-rawwidth=&806& data-rawheight=&509& class=&origin_image zh-lightbox-thumb& width=&806& data-original=&https://pic3.zhimg.com/v2-cbf_r.jpg&&&/figure&&p&&br&&/p&&h2&7、优秀回答者&/h2&&p&除了认证信息外,优秀回答者这是鉴别某用户是否为优质用户,是否值得关注的一个重要指标。包含张佳玮在内,共有468位优秀回答者,涉及257个话题,共出现768人次优秀回答者标签。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-3d644eb0caaadb0_b.jpg& data-caption=&& data-rawwidth=&2732& data-rawheight=&1178& class=&origin_image zh-lightbox-thumb& width=&2732& data-original=&https://pic4.zhimg.com/v2-3d644eb0caaadb0_r.jpg&&&/figure&&p&&br&&/p&&p&而所有优秀回答者贡献的回答和知乎收录回答情况如下:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e2d18b6b193a022a918e03cbb4f5a9f8_b.jpg& data-caption=&& data-rawwidth=&827& data-rawheight=&378& class=&origin_image zh-lightbox-thumb& width=&827& data-original=&https://pic4.zhimg.com/v2-e2d18b6b193a022a918e03cbb4f5a9f8_r.jpg&&&/figure&&p&&br&&/p&&p&最右上角的便是张佳玮的贡献情况,令人望尘莫及。也有不少用户贡献了上千个回答,可以说是非常高产。但大部分用户回答数&1000,收录数&50。密集区域放大后如图:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-654e95ddc59afc2fb5cd98db_b.jpg& data-caption=&& data-rawwidth=&827& data-rawheight=&378& class=&origin_image zh-lightbox-thumb& width=&827& data-original=&https://pic3.zhimg.com/v2-654e95ddc59afc2fb5cd98db_r.jpg&&&/figure&&p&有不少数据收录回答为0,因为还不知道知乎优秀回答者的评判标准,所以此处还需进一步了解。另外这些数据点,对应的加上一些大V名字可能显示起来能好,但一直在摸索,还不得要领。&/p&&h2&三、小结&/h2&&p&本项目是个人第一次百万级数据的爬取,当然由于爬取效率方面需要改进,所以详细用户信息选择性的只爬了100+关注人数共4.1w+的id。另外也是第一次数据可视化,从完全不懂Echarts的各种参数,硬刚配置项,到勉强获得了上述还算能看的一些数据图,不少地方还需进一步学习、改进,以求获得更合乎要求的、理想的、自定义的可视化图。&/p&&p&另外,除却上述数据外,还有点赞数、感谢数、收藏数、关注数和被关注数、签名、个人简介等等数据并未处理,但基本想要获取的图都得到了,算是完成了此项目,也学到了很多东西。&/p&
----------------------------------------------- 更新------------------------------------------------ 写在前面本文写于一个月前,由于当时两次申请知乎专栏都没有成功,于是先首发于简书:《》,并以文…
&figure&&img src=&https://pic4.zhimg.com/v2-3f7e0cea63a_b.jpg& data-rawwidth=&1920& data-rawheight=&651& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic4.zhimg.com/v2-3f7e0cea63a_r.jpg&&&/figure&&blockquote&本文已授权微信公众号 AndroidDeveloper 独家发布。&/blockquote&&h2&零、楔子&/h2&&p&这篇文章包含了对 Google 编程之夏(Google Summer of Code,简称 GSoC)的介绍、个人感受和一些申请技巧。写作的契机源于一篇发布在 Google Open Source 上的博客:&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//opensource.googleblog.com/2017/05/google-summer-of-code-2017-statistics.html& target=&_blank& rel=&nofollow noreferrer&&Google Summer of Code 2017 statistics part 1&/a&,这篇博客列出了 2017 年参与项目的学生的国家分布情况,其中有几项数字颇为有趣:2017 年总共有来自 72 个国家的 1318 名学生获得了项目资格,其中来自&strong&中国大陆&/strong&的学生 &strong&49&/strong& 名,来自&strong&美国&/strong&的学生 &strong&126 &/strong&名。学生最多的是哪个国家呢?你们可能猜到了,是我们的邻居&strong&印度&/strong&,有足足 &strong&569&/strong& 名!超过全部学生的 40%。&/p&&p&印度学生的比例之高令人咋舌,相比之下我们中国学生的人数就有点少得可怜了。然而就我个人的感受而言,中国学生数量少的最大原因也许是:根本没有听说过这个项目!“GSoC 是什么?好吃么?”,估计这才是绝大部分人听到 GSoC 之后的感受。&/p&&p&我自己了解到 GSoC,是大一暑假机缘巧合下看到了同校大神 &a href=&http://www.zhihu.com/people/6dbc5edc97d9b067daa33bb8de655a7f& data-hash=&6dbc5edc97d9b067daa33bb8de655a7f& class=&member_mention& data-title=&@杨垒& data-hovercard=&p$b$6dbc5edc97d9b067daa33bb8de655a7f&&@杨垒&/a& 的一篇博客 &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//blog.yangl1996.com/imported_from_old_blog_62/& target=&_blank& rel=&nofollow noreferrer&&申请 Google Summer of Code 2015&/a&。之后本打算在 2016 年申请的,但因为暑假参加了车协的暑期远征而搁置,而后在 2017 年申请并顺利通过。这一年多里我也时不常的跟身边的小伙伴卖安利。后来在今年的 GSoC 微信群中也看到了好几个北大同学,大家也更多的是靠身边人的口口相传了解到 GSoC。非常开心在这之中自己也为 GSoC 在我校的普及做出了一点微小的贡献。&/p&&p&当我看到印度学生人数 10 倍于我们,参与人数排名前十的学校中有八个来自印度时,除了多少有些不服气,更多的是钦佩印度程序员们相互提携、信息共享的机制,这点上跟他们为何能在硅谷混的风生水起有不少共通之处,不过不是本文重点,不做展开。基于这些背景,这几天我一直筹划着写一篇较为正式的文章,介绍 GSoC 并提供一些自己的感受和申请经验。以后再安利时便不必再笨拙的口述,直接把文章丢过去就好~ 同时也希望更多热爱技术的同学们能够通过本文,了解并有机会参与到这样一个 &strong&Google 组织的、含金量高、报酬丰厚(你可以拿到数万元的奖励!)、拥有众多大名鼎鼎的开源社区参与&/strong&的暑期项目。希望能以此为广大技术水平扎实并渴望锻炼的国内大学生们提供一点微小的帮助,不要再因为“不知道”、“没听说”而错过了这样一个优秀的项目!&/p&&h2&一、Google 编程之夏是什么&/h2&&p&这个问题,我们先来看看 Google 官方是怎么说的:(出自 &a class=& wrap external& href=&http://link.zhihu.com/?target=http%3A//write.flossmanuals.net/gsocstudentguide/what-is-google-summer-of-code/& target=&_blank& rel=&nofollow noreferrer&&What is Google Summer of Code?&/a&)&/p&&blockquote&&p&Google Summer of Code (GSoC) is a global program that matches students up with open source, free software and technology-related organizations to write code and get paid to do it! The organizations provide mentors who act as guides through the entire process, from learning about the community to contributing code. The idea is to get students involved in and familiar with the open source community and help them to put their summer break to good use.&/p&&/blockquote&&p&译即:&/p&&blockquote&&p&Google 编程之夏是一个全球性项目,旨在为学生们和开源、自由软件、技术相关的组织建立联系,让学生们贡献代码并获得报酬!组织会提供导师,在学生从熟悉社区到贡献代码的整个过程中提供指导。这个想法的目的是让学生们参与和熟悉开源社区,并帮助他们充分利用暑假时间去得到锻炼。&/p&&/blockquote&&p&在我看来这段介绍十分简明扼要,如果你想了解更多细节,可以到 &a class=& wrap external& href=&http://link.zhihu.com/?target=http%3A//write.flossmanuals.net/gsocstudentguide/what-is-google-summer-of-code/& target=&_blank& rel=&nofollow noreferrer&&What is Google Summer of Code?&/a& 阅读全文。&/p&&p&如果用一句话概括的话就是,学生用一个暑假的时间(其实从 5 月底 6 月初就会开始,国外放暑假较早)在导师的指导下为开源社区写代码,Google 为你的工作支付报酬(2017 年之前似乎是 5K 刀;2017 年开始分地区支付,中国大陆降低至 3.6K 刀,换算过来约 25K 软妹币,仍然是一笔可观的收入)。&/p&&h2&二、GSoC 含金量高在哪里&/h2&&p&通常而言,同学们夏天想自我提升的话有两个去处,一是暑研、二是暑期实习。GSoC 偏向工程,和后者更为相似(但也有很大不同),和暑期实习对比着来分析,更容易看出 GSoC 的优势:&/p&&ul&&li&时间安排和工作模式&ul&&li&以 2017 年为例。5 月 4 日 Google 宣布入选学生名单,之后到 5 月 30 日约一个月的时间为 Community Bonding Period,在这段时间里可以熟悉社区、和导师针对你的项目进行探讨等。5 月 31 日开始至 8 月 29 日是正式工作时间,你将会在约 12 周的时间里完成你所申请的项目。除了开始时间略早于国内期末考试时间外,时间跨度上基本与大部分暑期实习无异。而具体的任务量因项目而异,但通常不会太过繁重。导师也一般不会为难你,即使不能全部完成预期的内容,只要全程认真负责的参与,大都也会给 Pass。可能更多的时候是项目对中国学生而言是比较水的,比如前几天(Coding Period 才刚刚开始)群里就有人表示已经把全部 Coding 做完了现在正无聊的写文档……&/li&&li&GSoC 的任务全部是线上(online)完成的,相对于实习时每日早晚高峰痛苦的挤地铁(不忍吐槽帝都的交通),你完全可以在家中、在学校宿舍完成需要做的一切。简捷高效,不要太省心!&/li&&/ul&&/li&&li&报酬&ul&&li&降价之前的报酬折算至每月是 11K 有余,几乎快赶上一线互联网公司的正式应届员工价格了。降价之后大概是一月 8K 多,仍然是碾压各家一线的实习生价格。还不用扣税哟!&/li&&/ul&&/li&&li&个人成长&ul&&li&在 GSoC 项目期间,每个学生都会被分配一名导师,在整个项目期间给予你帮助。就我的亲身经历和身边人的体会,虽然会有些比较懒的放养导师,不过基本上还都是非常认真负责而且热心的。导师本身的技术水平也都十分出色。而如果你参与的是 GCC、OpenCV 这类久负盛名的工具、语言、框架的组织下的项目,很可能你的导师就会是这些组织的 Core Team Developer,他们可都是在行业内备受尊敬的大牛。&/li&&li&再拿我的经历举例。有一次我向主仓库提交了一段总计不超过 50 行的改动,但因为改动较为关键,组织内的几个导师和我充分的讨论了足足一周,覆盖了代码风格、性能优化、可测试性、向前和向后兼容、设计原则等方方面面,经过数次修改,最终成功并入。这个过程中是收获巨大的。通常我们会讲被 review 是非常好的学习途径,写越少而精的代码,被 review 的越详细,对应的成长是越快的。而 GSoC 正是这种模式。&/li&&li&相比而言,大部分一线开发岗位的实习,负责带你的人很可能也只是刚毕业工作过三五年,本身技术水平不算惊艳,而业务导向的开发则是以效率为先的,很难有机会有人给你的代码做详尽细致的 review。更糟糕的一些情况是,可能有些实习生大部分时间都在做“打杂”的工作,而不能进行真正有意义的创造,更谈不上学习了。&/li&&li&当然实习也绝不能被一棍子打死,像 MSRA 的研究实习生、BAT TMD 华为这些一线公司的实验室或者核心部门实习也都是相当有含金量的,其中也有很多 GSoC 中所不能学习到的东西,也是非常值得选择的。&/li&&/ul&&/li&&/ul&&p&综上来看,GSoC 的质量是相当高的,从各方面来看,都非常值得参与。Google 官方资料中有这样一句话:&/p&&blockquote&&p&Successful students have widely reported that their participation in GSoC made them more attractive to potential employers and that the program has helped greatly when embarking on their technical careers.&/p&&/blockquote&&p&GSoC 在世界范围内都很受认可,成功的完成 GSoC 项目的你会更容易受到用人公司的青睐。如果未来希望加入 Google,这段经历则更是一大加分项。&/p&&p&而由于 GSoC 是全线上远程工作,你也完全可以选择在参加科研或实习的同时,也参与一个 GSoC 项目,两者兼得。比如我自己,在今天夏天参与 GSoC 项目的同时,也会在 MSRA 大数据组实习。因这次 GSoC 认识的 &a href=&http://www.zhihu.com/people/c588f9df071dddb701278a& data-hash=&c588f9df071dddb701278a& class=&member_mention& data-title=&@大缺弦& data-hovercard=&p$b$c588f9df071dddb701278a&&@大缺弦&/a&
也是同样既参与 GSoC 又在 MSRA 实习。所以说完全不用担心因为参加 GSoC 而错过其他机会! &/p&&h3&三、申请资格、流程和技巧&/h3&&p&任何在读的本科、硕士、博士生均可以申请 GSoC。如果你已经毕业了,那就非常遗憾不能再以学生身份参与 GSoC 了。Google 还有一些更细节的要求,但一般都是可以满足的,具体可参照:&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//developers.google.com/open-source/gsoc/faq%23what_are_the_eligibility_requirements_for_participation& target=&_blank& rel=&nofollow noreferrer&&FAQ#What are the eligibility requirements for participation?&/a&&/p&&p&Google 每年都会发布 GSoC 的时间表,例如 2017 年的:&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//developers.google.com/open-source/gsoc/timeline& target=&_blank& rel=&nofollow noreferrer&&Google Summer of Code 2017 Timeline&/a&&/p&&p&其中有一项是 List of accepted mentoring organizations published,即宣布当年的组织列表,每个组织都会有一个主页,列出可供你选择的 Project Ideas。今年是在 2 月 27 日宣布的。在这之后你就可以查看成百上千个 Ideas 并找出你所感兴趣的了。在 Student application deadline 之前(今年为 4 月 3 日),你可以向 Google 提交至多 5 份 Proposals,每一份 Proposal 要包含你对其中一个 Idea 的设想、实施方案、时间规划等,Proposal 需要写的具体内容因组织者的要求而异。此后由组织负责审阅所有学生提交的 Proposals,选出他们所认为优秀的。在约一个月之后(今年为 5 月 4 日),Google 会宣布被选中的学生列表,如果你顺利通过,便可以开始当年的 GSoC 之旅了!&/p&&p&以上是申请流程的基本概要,Google 官方也提供了非常详尽的 &a class=& wrap external& href=&http://link.zhihu.com/?target=http%3A//write.flossmanuals.net/gsocstudentguide/making-first-contact/& target=&_blank& rel=&nofollow noreferrer&&学生指南&/a& 和 &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//developers.google.com/open-source/gsoc/faq& target=&_blank& rel=&nofollow noreferrer&&FAQ&/a&,这些内容你都可以在其中找到,并且有更为详细和准确的申请介绍和指导。&/p&&p&&strong&下面就是私货啦!一些我自己的和其他 GSoC 参与者的人生经验!&/strong&&/p&&p&首先是选什么。参与 GSoC 的组织会有数百个,一个个看根本看不过来,选择困难症们可要头疼了。我的建议是选择自己有过实际使用经验的,相对于从未使用过的语言、框架等,你会对它们更加了解,比如今年我就考虑了 homebrew、checkstyle(Java 静态检查工具,很早就引入了 PKU Helper 开发之中,后来我也最终选择了这个组织下的项目);其次,选择与自身技术栈相匹配的,比如我最擅长的技术栈是 JVM Based Language,我就会更加留意用到 Java、Clojure、Scala 的项目。&/p&&p&划定了最初范围之后,你就可以通过组织公开的联络渠道,同导师们联(套)系(磁)。通常来讲以 Mailing List 和 IRC 居多,也有 IM。你可以进一步的了解这些组织和下属的项目,从而找到你最感兴趣的。虽然每个人可以填写多至 5 份 Proposals,但就实际经验而言,认真书写一份 Proposal 就要花费非常多的精力了,广撒网是不太可取的,重在精不在多。根据 &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//opensource.googleblog.com/2017/06/google-summer-of-code-2017-statistics.html& target=&_blank& rel=&nofollow noreferrer&&Google Summer of Code 2017 statistics part 2&/a&,2017 年共有 4764 名学生提交了 7089 份 Proposals。也就是说平均下来每个人也就提交了一份多而已。&/p&&p&在选定了 checkstyle 之后,我非常感兴趣一个叫 &em&Optimization of Distance Between Methods in Single Java Class&/em& 的项目。它涉及到算法、数学模型,非常有趣同时又附有挑战性。&/p&&p&之后就是为此撰写 Proposal,其中分为了三大部分:About Me、Project 和 Extra Information。About Me 就是一些个人基本信息和编程技能的介绍,Extra Information 给出了我的工作时间、时区和一些想说的话。Project 是最要的部分,包含了 Project Description、Outline 和 Expected Timeline。其中详细的给出了我预想的数学模型的设计、统计分析过程、可使用的算法和实现以及会为此撰写一篇 Article。&/p&&p&书写 Proposal 的重点在我看来就是要&b&认真细致、考虑可行性和工作量、和导师们充分讨论,最后再加上一条美观&/b&。在以上的方法论下我花费了一周多的时间磨出一份颜值甚高的 Proposal 来,和导师们也讨论的风生水起。本来觉得拿到这个项目板上钉钉了,结果离 application deadline 还有两天的时候,导师突然私信我说,我们认为这个项目太难了,我们可能找不到足够多的导师来带你,所以你赶紧再找一个项目赶一篇 Proposal 出来吧。我:???……没办法,花了半天的时间挑了另一个看着还可以的项目火速写了一篇出来。导师也够意思,跟我说你随便写写思路就完了,不用太详细。之后赶在 deadline 前顺利上交两份 Proposals,并且中了后面那篇。&/p&&p&导师对我的 Proposal 评价很高,如果以后有申请的小伙伴感兴趣想参考的话可以移步 Google Docs:&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//docs.google.com/document/d/1lWXpWhUN6cE06sjQANjWxamc_X3ddbSphTRSofChLyk/edit%3Fusp%3Dsharing& target=&_blank& rel=&nofollow noreferrer&&Optimization of Distance Between Methods in Single Java Class&/a&、&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//docs.google.com/document/d/1xu6SE4qeKTRQ45R9FSLOQB-t5ExzBGyvU9FLGifvxY0/edit%3Fusp%3Dsharing& target=&_blank& rel=&nofollow noreferrer&&Regression Testing Tool and HTML Report Generator for Pull Request&/a&。&/p&&br&&p&除了一份质量过硬的 Proposal 之外,在宣布最终名单之前和导师们的套磁也是非常重要的!多在 Mailing List 中刷刷脸,积极参与讨论。如果能够提出 Bug 甚至修复 Bug 或者实现新的 Feature 那是最好的。Checkstyle 的导师在最开始就清楚的写到学生的 Fixed Issue 数是很重要的指标。后来在 deadline 之前我足足交了 8 个 PR 位列十多个竞争者第一,这点也为我最终被选中加了不少分。&/p&&p&总结一下,&strong&认真投入、积极参与、多讨论多反馈,甚至去帮助社区中的其他开发者&/strong&,那么你就会有非常大的机会被选中!今年 4764 名提交了 Proposals 的学生中有 1318 名被选中,入选率大于四分之一,是相当高的。而且这 4764 人里其实有很多人是根本没有好好写 Proposal 的,也有很多人是水平真的很差也过来申请的。所以对绝大多数基础不差的国内大学生来讲,只要好好申请都是比较容易中的。要知道,咱们大学生的技术功底,甚至英语水平,绝不比邻居印度学生差(印度人的英语真的不见得都好),人家可以申请到 500+,咱们也可以做到,49 人远远不是咱们的真实水平!&/p&&h2&四、结语&/h2&&p&2017 年的 GSoC 已经在如火如荼的进行中了,今年错过了的小伙伴们不要遗憾,只要你们不是下个月就毕业离开校园了,GSoC 2018 便等着你们~ 离明年的 GSoC 申请开放还有半年多的时间,如果你觉得现在自己能力还稍显不足,那就趁着这段时间努力提高自己,逐渐尝试阅读一些 GitHub 上的开源项目,甚至参与其中吧!祝愿你们都能顺利申请到自己喜欢的 GSoC 项目!&/p&
本文已授权微信公众号 AndroidDeveloper 独家发布。零、楔子这篇文章包含了对 Google 编程之夏(Google Summer of Code,简称 GSoC)的介绍、个人感受和一些申请技巧。写作的契机源于一篇发布在 Google Open Source 上的博客:
路过,大学期间爬过很多有趣的有用的有意义的网站。在这里顺便做个总结交个朋友&br&&b&1.教务网站(涉及模拟登录)&/b&&br&很多高校在入学时的教务系统登录密码是一样的,而且50%的学生到大四都不改:)(123456)&br&当年写的第一个爬虫,用的php,因为php的curl库做模拟登录简单暴力,代码很简单,创建递归模拟登录,解析成绩页面。(南理工的同学应该还记得当初风格极简的教务系统,没有验证码,没有浏览器拦截,cookie不加密)。&br&硬盘里存着懒得改密码同学的姓名学号成绩在当时是一种可怕的成就感:|&br&&br&&b&2.小游戏网站&/b&&br&在CSTO上接了一个爬小游戏的单子,细聊后了解到他们在做针对低龄青少年的游戏网站(类似4399)。&br&也是从那个时候才知道原来小游戏网站的swf文件都是赤裸裸的对外开放,仍然记得交付的时候对方的表情,哦,原来这个网站的文件都是不加密的啊,那挺简单的。最后不得不悻悻地给钱走人。&br&由于对方站点&当时&没有做相关声明与技术拦截,原则上讲通过手动方式能够获取的文件都不算违法。&br&&a href=&https://www.zhihu.com/question/& class=&internal&&爬取京东,亚马逊商城的数据违法吗? - 互联网&/a&&br&&br&&b&3.亚文化与小清新网站&/b&&br&在做饥饿(StarvingTime)的时候调研过相关小众网站,这些网站都是土豪外包,法律条款基本没有,而且有些现在已经挺火了。大家没事可以爬爬,数据存下来总没有坏处。&br&&a href=&//link.zhihu.com/?target=http%3A//www.vice.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&VICE 中国 | 全球青年文化之声:世界在下沉,我们在狂欢&i class=&icon-external&&&/i&&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//www.ontheroadstore.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&公路商店_为你不着边际的企图心&i class=&icon-external&&&/i&&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//chokstick.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ChokStick 骚货&i class=&icon-external&&&/i&&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//dongxi.douban.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&豆瓣东西&i class=&icon-external&&&/i&&/a&&br&&br&&b&4.微信公众号&/b&&br&无意间发现饥饿公众号的文章出现在林子聪头像旁边,好奇微信有做加密怎么会被爬,民间高手也太强了。后来调研了一下,原来是搜狗将微信的接口买了下来造福大众。&br&&a href=&https://www.zhihu.com/question/& class=&internal&&如何利用爬虫爬微信公众号的内容? - 移动互联网&/a&&br&&br&&b&5.股票数据&/b&&br&前年暑假做神经网络,需要大量的个股数据用来训练,于是爬了A股的所有数据。当时雅虎,新浪等都有api,先使用雅虎,资料太旧不成功。大家可以试试。&br&&a href=&//link.zhihu.com/?target=http%3A//www.cnblogs.com/xxonehjh/archive//3218745.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&雅虎股票接口&i class=&icon-external&&&/i&&/a&&br&新浪没有历史数据接口。&br&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/simon803/article/details/7784682& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&新浪实时股票数据接口http://hq.sinajs.cn/list=code&i class=&icon-external&&&/i&&/a&&br&google的中国股票数据当时也调用的新浪接口,所以最终方案就是爬新浪页面,当时新浪财经的UI有展示历史数据,现在依然存在。&br&&a href=&//link.zhihu.com/?target=http%3A//vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php%3Fsymbol%3Dshdate%3D& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&西宁特钢(sh600117)历史成交明细&i class=&icon-external&&&/i&&/a&(对于个股也可以直接用同花顺等软件下载。)&br&&br&&b&6.音乐网站&/b&&br&&b&&a href=&//link.zhihu.com/?target=http%3A//wwwt.luoo.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&落网 - 独立音乐推荐&i class=&icon-external&&&/i&&/a&&/b&&br&硬盘里有它六千多首歌,一辈子都够听了&br&&br&---------------------------------------------------安利线------------------------------------------------&br&自己写的可配置爬虫&br&基于python3.4,有了异步访问后爬虫的效率简直了。&br&&b&什么是可配置爬虫?&/b&&br&可以设置爬取深广度,爬取规则(正则直接写在xml里),爬取对象,爬取站点,爬取模式(主要是静态。动态爬取还在测试)&br&&b&&figure&&img src=&https://pic3.zhimg.com/9dfac832becaaae951a37d5aab648cfe_b.jpg& data-rawwidth=&1068& data-rawheight=&606& class=&origin_image zh-lightbox-thumb& width=&1068& data-original=&https://pic3.zhimg.com/9dfac832becaaae951a37d5aab648cfe_r.jpg&&&/figure&如图是一个从某用户开始深度爬取知乎的 config DEMO,稍微改几个字段就可以爬取别的站点,使用起来非常方便。&/b&&br&&b&代码松耦合。数据存储用的是MongoDB,所以使用的话需要先安装mongodb,支持分布式,配合django+nginx开发系统工程效率可观。&/b&&br&&b&&a href=&//link.zhihu.com/?target=http%3A//download.csdn.net/detail/u45526& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&可配置爬虫Python&i class=&icon-external&&&/i&&/a&&/b&
路过,大学期间爬过很多有趣的有用的有意义的网站。在这里顺便做个总结交个朋友 1.教务网站(涉及模拟登录) 很多高校在入学时的教务系统登录密码是一样的,而且50%的学生到大四都不改:)(123456) 当年写的第一个爬虫,用的php,因为php的curl库做模拟登…
1.需要一个微信公众号(采用微信测试号比较方便,接口全部开放了)&br&2.将关注了你微信平台用户的openid与他们的教务账号绑定起来。参考微信开发者文档&br&3.需要一个爬虫来根据教务账号爬取教务信息,参考&a href=&https://www.zhihu.com/question//answer/& class=&internal&&毕业设计想把学校教务系统的功能模块做成手机APP? - 胡勇的回答 - 知乎&/a&&br&需要的技术包括:服务端开发+网页前端开发,毕竟界面要漂亮,才有人喜欢用!
1.需要一个微信公众号(采用微信测试号比较方便,接口全部开放了) 2.将关注了你微信平台用户的openid与他们的教务账号绑定起来。参考微信开发者文档 3.需要一个爬虫来根据教务账号爬取教务信息,参考
&figure&&img src=&https://pic1.zhimg.com/v2-66a157c1d1bb426fc9b4a_b.jpg& data-rawwidth=&1354& data-rawheight=&636& class=&origin_image zh-lightbox-thumb& width=&1354& data-original=&https://pic1.zhimg.com/v2-66a157c1d1bb426fc9b4a_r.jpg&&&/figure&&blockquote&&p&上次我们通过cookie登陆了 我的钢铁网。但是实际上这种方式并不是通用和安全的。这次我们来通过分析网站post的登录数据来登录现在各个大学都在用的正方教务系统。 &/p&&/blockquote&&br&&h3&目标分析:&/h3&&p&先来看一下我们都很讨厌的教务系统:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-cef463d2be92b0424743dc_b.jpg& data-rawwidth=&1894& data-rawheight=&718& class=&origin_image zh-lightbox-thumb& width=&1894& data-original=&https://pic4.zhimg.com/v2-cef463d2be92b0424743dc_r.jpg&&&/figure&&br&&br&&p&从图中我们可以大概分析出我么需要填写的字段:&/p&&ul&&li&用户名&/li&&li&密码&/li&&li&验证码&/li&&li&身份选择&/li&&/ul&&p&需要注意的就是&strong&验证码&/strong&:&/p&&p&可以知道验证码是以图片的方式浮现在文本框上的,&br&Python有很多图像识别的第三方库,&br&但是准确率和使用上都比较麻烦。&br&这里我选择找到验证码的图片链接,并下载到本地,&br&通过用户手动输入验证码来完成登录&/p&&br&&h3&验证码的抓取:&/h3&&p&仔细分析一下网页,&br&我们可以直接找到验证码其实是一个图片:&/p&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&img&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&icode&&/span& &span class=&na&&src&/span&&span class=&o&&=&/span&&span class=&s&&&CheckCode.aspx&&/span& &span class=&na&&onclick&/span&&span class=&o&&=&/span&&span class=&s&&&reloadcode();&&/span& &span class=&na&&alt&/span&&span class=&o&&=&/span&&span class=&s&&&看不清,换一张&&/span& &span class=&na&&title&/span&&span class=&o&&=&/span&&span class=&s&&&看不清,换一张&&/span& &span class=&na&&alt&/span&&span class=&o&&=&/span&&span class=&s&&&&&/span& &span class=&na&&border&/span&&span class=&o&&=&/span&&span class=&s&&&0&&/span& &span class=&na&&style&/span&&span class=&o&&=&/span&&span class=&s&&&POSITION:TOP:5LEFT:130px&&/span& &span class=&p&&/&&/span&
&/code&&/pre&&/div&&p&分析一下不难得出图片的连接:&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&http://jw.****.edu.cn/(gxv2le55n4jswm45mkv14o2n)/CheckCode.aspx
&/code&&/pre&&/div&&p&通过这个连接我们可以知道教务系统是通过&a href=&https://link.zhihu.com/?target=http%3A//ASP.NET& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ASP.NET&/span&&span class=&invisible&&&/span&&/a&开发的&/p&&br&&h3&Post数据的抓取:&/h3&&p&我们如何能知道每次我们提交登录按钮之后,&br&我们都想服务器提交了哪些数据呢?&/p&&p&这又要用到&strong&Chrome开发者工具了&/strong&&/p&&p&这里给一个技巧,我们可以先故意输入一个 &strong&错误的值&/strong&&br&来追踪一下我们究竟post了哪些值&/p&&p&打开 Chrome开发者工具 --- Networks --- 勾选 Preserve log&/p&&p&输入一些值,点击 登录按钮,&/p&&p&在点开右边的 Headers 拉倒最后的 FromData:&/p&&p&这里就是我们提交数据:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-eea124d00eef0abcaf599a6_b.jpg& data-rawwidth=&988& data-rawheight=&410& class=&origin_image zh-lightbox-thumb& width=&988& data-original=&https://pic3.zhimg.com/v2-eea124d00eef0abcaf599a6_r.jpg&&&/figure&&br&&p&这个字典里,我们很容易可以看到我们需要自己填写的值:&/p&&p&&strong&post的数据一般是通过键值对的形式传到服务器的,一般是字典或json格式&/strong&&br&&/p&&ul&&li&txtUserName: 用户名&/li&&li&TextBox: 密码&/li&&li&txtSecretCode: 验证码&/li&&li&RadioButtonList1 :选择按钮 学生(这里需要我们手动编码成gbk编码)&/li&&/ul&&br&&p&但是其他乱七八糟的又是什么?&br&其中最奇怪的是第一个: &strong&——VIEWSTATE&/strong&&/p&&p&这一长串随机的值,实际上是正方系统的一个简单的验证手段。&br&我们在登录页面的原单代码里搜一下这串值:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-131d7f95e669ef7272d3_b.jpg& data-rawwidth=&1200& data-rawheight=&358& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic2.zhimg.com/v2-131d7f95e669ef7272d3_r.jpg&&&/figure&&br&&p&&b&原来是input栏里的value&/b&,&br&找到他的位置之后,&br&我们就可以很简单的构造出我们需要post的字典了&/p&&br&&h3&代码的书写:&/h3&&p&由于只是想分享一下登录的过程,&br&爬虫的部分,我只是抓取了登录人的名字作为验证,&br&代码也比较简陋,大家看个思路就成:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&requests&/span&
&span class=&kn&&import&/span& &span class=&nn&&bs4&/span&
&span class=&kn&&import&/span& &span class=&nn&&os&/span&
&span class=&c1&&# 这是Python的一个非常有名的图片库,这里我们用它来显示验证码&/span&
&span class=&kn&&from&/span& &span class=&nn&&PIL&/span& &span class=&kn&&import&/span& &span class=&n&&Image&/span&
&span class=&k&&def&/span& &span class=&nf&&get_post_data&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&):&/span&
&span class=&c1&&# 首先获取到登录界面的html&/span&
&span class=&n&&html&/span& &span class=&o&&=&/span& &span class=&n&&requests&/span&&span class=&o&&.&/span&&span class=&n&&get&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&
&span class=&p&&)&/span&
&span class=&n&&soup&/span& &span class=&o&&=&/span& &span class=&n&&bs4&/span&&span class=&o&&.&/span&&span class=&n&&BeautifulSoup&/span&&span class=&p&&(&/span&&span class=&n&&html&/span&&span class=&o&&.&/span&&span class=&n&&text&/span&&span class=&p&&,&/span& &span class=&s1&&'lxml'&/span&&span class=&p&&)&/span&
&span class=&c1&&# 找到form的验证参数&/span&
&span class=&n&&__VIEWSTATE&/span& &span class=&o&&=&/span& &span class=&n&&soup&/span&&span class=&o&&.&/span&&span class=&n&&find&/span&&span class=&p&&(&/span&&span class=&s1&&'input'&/span&&span class=&p&&,&/span& &span class=&n&&attrs&/span&&span class=&o&&=&/span&&span class=&p&&{&/span&&span class=&s1&&'name'&/span&&span class=&p&&:&/span& &span class=&s1&&'__VIEWSTATE'&/span&&span class=&p&&})[&/span&&span class=&s1&&'value'&/span&&span class=&p&&]&/span&
&span class=&c1&&# 下载验证码图片&/span&
&span class=&n&&pic&/span& &span class=&o&&=&/span& &span class=&n&&requests&/span&&span class=&o&&.&/span&&span class=&n&&get&/span&&span class=&p&&(&/span&
&span class=&s1&&'http://jw.****.edu.cn/(gxv2le55n4jswm45mkv14o2n)/CheckCode.aspx'&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&content&/span&
&span class=&k&&with&/span& &span class=&nb&&open&/span&&span class=&p&&(&/span&&span class=&s1&&'ver_pic.png'&/span&&span class=&p&&,&/span& &span class=&s1&&'wb'&/span&&span class=&p&&)&/span& &span class=&k&&as&/span& &span class=&n&&f&/span&&span class=&p&&:&/span&
&span class=&n&&f&/span&&span class=&o&&.&/span&&span class=&n&&write&/span&&span class=&p&&(&/span&&span class=&n&&pic&/span&&span class=&p&&)&/span&
&span class=&c1&&# 打开验证码图片&/span&
&span class=&n&&image&/span& &span class=&o&&=&/span& &span class=&n&&Image&/span&&span class=&o&&.&/span&&span class=&n&&open&/span&&span class=&p&&(&/span&&span class=&s1&&'{}/ver_pic.png'&/span&&span class=&o&&.&/span&&span class=&n&&format&/span&&span class=&p&&(&/span&&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&getcwd&/span&&span class=&p&&()))&/span&
&span class=&n&&image&/span&&span class=&o&&.&/span&&span class=&n&&show&/span&&span class=&p&&()&/span&
&span class=&c1&&# 构造需要post的参数表&/span&
&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&s1&&'txtUserName'&/span&&span class=&p&&:&/span& &span class=&s1&&''&/span&&span class=&p&&,&/span&
&span class=&s1&&'Textbox1'&/span&&span class=&p&&:&/span& &span class=&s1&&''&/span&&span class=&p&&,&/span&
&span class=&s1&&'TextBox2'&/span&&span class=&p&&:&/span& &span class=&s1&&''&/span&&span class=&p&&,&/span&
&span class=&s1&&'txtSecretCode'&/span&&span class=&p&&:&/span& &span class=&s2&&&&&/span&&span class=&p&&,&/span&
&span class=&s1&&'__VIEWSTATE'&/span&&span class=&p&&:&/span& &span class=&s1&&''&/span&&span class=&p&&,&/span&
&span class=&c1&&# 这里我将radio栏--学生 encode成gbk编码,以符合数据的要求&/span&
&span class=&s1&&'RadioButtonList1'&/span&&span class=&p&&:&/span& &span class=&s1&&'&/span&&span class=&se&&\xd1\xa7\xc9\xfa&/span&&span class=&s1&&'&/span&&span class=&p&&,&/span&
&span class=&s1&&'Button1'&/span&&span class=&p&&:&/span& &span class=&s1&&''&/span&&span class=&p&&,&/span&
&span class=&s1&&'lbLanguage'&/span&&span class=&p&&:&/span& &span class=&s1&&''&/span&&span class=&p&&,&/span&
&span class=&s1&&'hidPdrs'&/span&&span class=&p&&:&/span& &span class=&s1&&''&/span&&span class=&p&&,&/span&
&span class=&s1&&'hidsc'&/span&&span class=&p&&:&/span& &span class=&s1&&''&/span&&span class=&p&&,&/span& &span class=&p&&}&/span&
&span class=&c1&&# 构造登录的post参数&/span&
&span class=&n&&data&/span&&span class=&p&&[&/span&&span class=&s1&&'__VIEWSTATE'&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&__VIEWSTATE&/span&
&span class=&n&&data&/span&&span class=&p&&[&/span&&span class=&s1&&'txtSecretCode'&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&nb&&input&/span&&span class=&p&&(&/span&&span class=&s1&&'请输入图片中的验证码'&/span&&span class=&p&&)&/span&
&span class=&n&&data&/span&&span class=&p&&[&/span&&span class=&s1&&'txtUserName'&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&nb&&input&/span&&span class=&p&&(&/span&&span class=&s2&&&请输入学号&&/span&&span class=&p&&)&/span&
&span class=&n&&data&/span&&span class=&p&&[&/span&&span class=&s1&&'TextBox2'&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&nb&&input&/span&&span class=&p&&(&/span&&span class=&s2&&&请输入密码&&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&n&&data&/span&
&span class=&c1&&# 登录教务系统&/span&
&span class=&k&&def&/span& &span class=&nf&&login&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&,&/span&&span class=&n&&data&/span&&span class=&p&&):&/span&
&span class=&c1&&# 通过requests库构造一个浏览器session,这能帮我们自动、持久的管理cookies,&/span&
&span class=&n&&s&/span& &span class=&o&&=&/span& &span class=&n&&requests&/span&&span class=&o&&.&/span&&span class=&n&&session&/span&&span class=&p&&()&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&post&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&,&/span& &span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&data&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&n&&s&/span&
&span class=&n&&base_url&/span& &span class=&o&&=&/span& &span class=&s1&&'http://jw.****.edu.cn/(gxv2le55n4jswm45mkv14o2n)/default2.aspx'&/span&
&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&n&&get_post_data&/span&&span class=&p&&(&/span&&span class=&n&&base_url&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&p&&)&/span&
&span class=&c1&&# 模拟登录教务系统&/span&
&span class=&n&&brow&/span& &span class=&o&&=&/span& &span class=&n&&login&/span&&span class=&p&&(&/span&&span class=&n&&base_url&/span&&span class=&p&&,&/span&&span class=&n&&data&/span&&span class=&p&&)&/span&
&span class=&n&&test&/span& &span class=&o&&=&/span& &span class=&n&&brow&/span&&span class=&o&&.&/span&&span class=&n&&get&/span&&span class=&p&&(&/span&
&span class=&s1&&'http://jw.****.edu.cn/(gxv2le55n4jswm45mkv14o2n)/xs_main.aspx?xh='&/span&&span class=&p&&)&/span&
&span class=&c1&&# 测试看看是否能找到登陆后的信息&/span&
&span class=&n&&soup&/span& &span class=&o&&=&/span& &span class=&n&&bs4&/span&&span class=&o&&.&/span&&span class=&n&&BeautifulSoup&/span&&span class=&p&&(&/span&&span class=&n&&test&/span&&span class=&o&&.&/span&&span class=&n&&text&/span&&span class=&p&&,&/span& &span class=&s1&&'lxml'&/span&&span class=&p&&)&/span&
&span class=&k&&try&/span&&span class=&p&&:&/span&
&span class=&n&&name&/span& &span class=&o&&=&/span& &span class=&n&&soup&/span&&span class=&o&&.&/span&&span class=&n&&find&/span&&span class=&p&&(&/span&&span class=&s1&&'span'&/span&&span class=&p&&,&/span& &span class=&n&&attrs&/span&&span class=&o&&=&/span&&span class=&p&&{&/span&&span class=&s1&&'id'&/span&&span class=&p&&:&/span& &span class=&s1&&'xhxm'&/span&&span class=&p&&})&/span&&span class=&o&&.&/span&&span class=&n&&text&/span&
&span class=&k&&except&/span&&span class=&p&&:&/span&
&span class=&n&&name&/span& &span class=&o&&=&/span& &span class=&s1&&'登录失败 '&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&name&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&br&&h3&结果:&/h3&&figure&&img src=&https://pic2.zhimg.com/v2-dc309ec90c0de234b1dba582f88d9725_b.jpg& data-rawwidth=&1628& data-rawheight=&584& class=&origin_image zh-lightbox-thumb& width=&1628& data-original=&https://pic2.zhimg.com/v2-dc309ec90c0de234b1dba582f88d9725_r.jpg&&&/figure&&br&&p&每个学校的教务系统多多少少都有点不一样的地方, &br&所以我就不给出具体的网址了&/p&&br&&blockquote&&p&每天的学习记录都会 同步更新到:&br&微信公众号: findyourownway&br&知乎专栏:&a href=&https://zhuanlan.zhihu.com/Ehco-python& class=&internal&&从零开始写Python爬虫 - 知乎专栏&/a&&br&blog : &a href=&https://link.zhihu.com/?target=http%3A//www.ehcoblog.ml& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&www.ehcoblog.ml&/a&&br&Github: &a href=&https://link.zhihu.com/?target=https%3A//github.com/Ehco1996/Python-crawler& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ehco1996/Python-crawler&/a&&/p&&/blockquote&
上次我们通过cookie登陆了 我的钢铁网。但是实际上这种方式并不是通用和安全的。这次我们来通过分析网站post的登录数据来登录现在各个大学都在用的正方教务系统。 目标分析:先来看一下我们都很讨厌的教务系统: 从图中我们可以大概分析出我么需要填写的字…
教大家一个抢课的技巧。&br&学校一般会给教师保留一个服务器。通过这个服务器登录就可以避免抢课时登不上的问题。&figure&&img src=&https://pic3.zhimg.com/c66eeb391dc27f6141cd3e_b.png& data-rawwidth=&1003& data-rawheight=&395& class=&origin_image zh-lightbox-thumb& width=&1003& data-original=&https://pic3.zhimg.com/c66eeb391dc27f6141cd3e_r.png&&&/figure&但是这个服务器学生登录的radio button默认是禁用的。&br&我们打开chrome的控制台输入&div class=&highlight&&&pre&&code class=&language-js&&&span class=&kd&&var&/span& &span class=&nx&&o&/span&&span class=&o&&=&/span&&span class=&nb&&document&/span&&span class=&p&&.&/span&&span class=&nx&&getElementById&/span&&span class=&p&&(&/span&&span class=&s2&&&RadioButtonList1_2&&/span&&span class=&p&&);&/span&
&span class=&nx&&o&/span&&span class=&p&&.&/span&&span class=&nx&&disabled&/span&&span class=&o&&=&/span&&span class=&kc&&false&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/0c28cf403f52a864fbd5d24e019af989_b.png& data-rawwidth=&1158& data-rawheight=&220& class=&origin_image zh-lightbox-thumb& width=&1158& data-original=&https://pic2.zhimg.com/0c28cf403f52a864fbd5d24e019af989_r.png&&&/figure&学生的radio button就可以选了。这样就可以登陆教师服务器进行选课。
教大家一个抢课的技巧。 学校一般会给教师保留一个服务器。通过这个服务器登录就可以避免抢课时登不上的问题。但是这个服务器学生登录的radio button默认是禁用的。 我们打开chrome的控制台输入var o=document.getElementById("RadioButtonList1_2");
&figure&&img src=&https://pic3.zhimg.com/v2-f4bd856afd34a_b.jpg& data-rawwidth=&1006& data-rawheight=&534& class=&origin_image zh-lightbox-thumb& width=&1006& data-original=&https://pic3.zhimg.com/v2-f4bd856afd34a_r.jpg&&&/figure&是很水,就一个文件,而且总的代码量还不足100行,还包括各种注释和空格。&p&是很水,网上搜索Python爬虫会出来很多相似的代码,开始学爬虫时也参考了一些。&/p&&p&是很水,只包含最简单的爬虫入门知识,没有任何深入的东西,没有任何原理性解释。&/p&&p&是很水,只够入门者看,稍微有点经验的爬虫工程师都看不上眼&/p&&p&但是......&/p&&p&也许这就是我的目的,只收集和整理最最基础的知识,给大家做一个类似“参考手册”的东西。让不懂Python或者刚入门Python的人能一眼看懂,同时也给稍微有点经验的人做个参考性笔记。如果大家有什么想知道的,或者想补充的,可以在评论中提出,我会第一时间添加。&/p&&p&Github地址:&a href=&https://link.zhihu.com/?target=https%3A//github.com/xianhu/LearnPython& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - xianhu/LearnPython: 以撸代码的形式学习Python&/a&&/p&&p&学习Python基础请移步:&a href=&https://zhuanlan.zhihu.com/p/?refer=pythoner& class=&internal&&千行代码入门Python - xianhu的文章 - 知乎专栏&/a&&br&&/p&&p&学习Python爬虫框架请移步:&a href=&https://zhuanlan.zhihu.com/p/?refer=pythoner& class=&internal&&一个极为简洁的Python爬虫框架 - 撸代码,学知识 - 知乎专栏&/a&&br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# _*_ coding: utf-8 _*_&/span&
&span class=&sd&&&&&&/span&
&span class=&sd&&python_spider.py by xianhu&/span&
&span class=&sd&&&&&&/span&
&span class=&kn&&import&/span& &span class=&nn&&urllib.error&/span&
&span class=&kn&&import&/span& &span class=&nn&&urllib.parse&/span&
&span class=&kn&&import&/span& &span class=&nn&&urllib.request&/span&
&span class=&kn&&import&/span& &span class=&nn&&http.cookiejar&/span&
&span class=&c1&&# 首先定义下边可能需要的变量&/span&
&span class=&n&&url&/span& &span class=&o&&=&/span& &span class=&s2&&&https://www.baidu.com&&/span&
&span class=&n&&headers&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&s2&&&User-Agent&&/span&&span class=&p&&:&/span& &span class=&s2&&&Mozilla/4.0 ( MSIE 5.5; Windows NT)&&/span&&span class=&p&&}&/span&
&span class=&c1&&# 最简单的网页抓取方式&/span&
&span class=&n&&response&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&urlopen&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&,&/span& &span class=&n&&timeout&/span&&span class=&o&&=&/span&&span class=&mi&&10&/span&&span class=&p&&)&/span&
&span class=&n&&html&/span& &span class=&o&&=&/span& &span class=&n&&response&/span&&span class=&o&&.&/span&&span class=&n&&read&/span&&span class=&p&&()&/span&&span class=&o&&.&/span&&span class=&n&&decode&/span&&span class=&p&&(&/span&&span class=&s2&&&utf-8&&/span&&span class=&p&&)&/span&
&span class=&c1&&# 使用Request实例代替url&/span&
&span class=&n&&request&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&Request&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&,&/span& &span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&bp&&None&/span&&span class=&p&&,&/span& &span class=&n&&headers&/span&&span class=&o&&=&/span&&span class=&p&&{})&/span&
&span class=&n&&response&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&urlopen&/span&&span class=&p&&(&/span&&span class=&n&&request&/span&&span class=&p&&,&/span& &span class=&n&&timeout&/span&&span class=&o&&=&/span&&span class=&mi&&10&/span&&span class=&p&&)&/span&
&span class=&c1&&# 发送数据,即在Request()中添加data参数&/span&
&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&parse&/span&&span class=&o&&.&/span&&span class=&n&&urlencode&/span&&span class=&p&&({&/span&&span class=&s2&&&act&&/span&&span class=&p&&:&/span& &span class=&s2&&&login&&/span&&span class=&p&&,&/span& &span class=&s2&&&email&&/span&&span class=&p&&:&/span& &span class=&s2&&&&&/span&&span class=&p&&,&/span& &span class=&s2&&&password&&/span&&span class=&p&&:&/span& &span class=&s2&&&123456&&/span&&span class=&p&&})&/span&
&span class=&n&&request1&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&Request&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&,&/span& &span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&data&/span&&span class=&p&&)&/span&
&span class=&c1&&# POST方法&/span&
&span class=&n&&request2&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&Request&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&o&&+&/span&&span class=&s2&&&?&/span&&span class=&si&&%s&/span&&span class=&s2&&&&/span& &span class=&o&&%&/span& &span class=&n&&data&/span&&span class=&p&&)&/span&
&span class=&c1&&# GET方法&/span&
&span class=&n&&response&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&urlopen&/span&&span class=&p&&(&/span&&span class=&n&&request&/span&&span class=&p&&,&/span& &span class=&n&&timeout&/span&&span class=&o&&=&/span&&span class=&mi&&10&/span&&span class=&p&&)&/span&
&span class=&c1&&# 发送Header,即在Request()中添加headers参数&/span&
&span class=&n&&request&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&Request&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&,&/span& &span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&data&/span&&span class=&p&&,&/span& &span class=&n&&headers&/span&&span class=&o&&=&/span&&span class=&n&&headers&/span&&span class=&p&&)&/span&
&span class=&c1&&# 参数中添加header参数&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&add_header&/span&&span class=&p&&(&/span&&span class=&s2&&&Referer&&/span&&span class=&p&&,&/span& &span class=&s2&&&http://www.baidu.com&&/span&&span class=&p&&)&/span&
&span class=&c1&&# 另一种添加header的方式,添加Referer是为了应对&反盗链&&/span&
&span class=&n&&response&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&urlopen&/span&&span class=&p&&(&/span&&span class=&n&&request&/span&&span class=&p&&,&/span& &span class=&n&&timeout&/span&&span class=&o&&=&/span&&span class=&mi&&10&/span&&span class=&p&&)&/span&
&span class=&c1&&# 网页抓取引发异常:urllib.error.HTTPError, urllib.error.URLError, 两者存在继承关系&/span&
&span class=&k&&try&/span&&span class=&p&&:&/span&
&span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&urlopen&/span&&span class=&p&&(&/span&&span class=&n&&request&/span&&span class=&p&&,&/span& &span class=&n&&timeout&/span&&span class=&o&&=&/span&&span class=&mi&&10&/span&&span class=&p&&)&/span&
&span class=&k&&except&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&error&/span&&span class=&o&&.&/span&&span class=&n&&HTTPError&/span& &span class=&k&&as&/span& &span class=&n&&e&/span&&span class=&p&&:&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&e&/span&&span class=&o&&.&/span&&span class=&n&&code&/span&&span class=&p&&,&/span& &span class=&n&&e&/span&&span class=&o&&.&/span&&span class=&n&&reas}

我要回帖

更多关于 xpath div 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信