没有Python项目可做?我教你个方法

学习了一段时间的Python,最近出现了“饥荒”,感觉需要多看些代码,多学习学习别人做些什么,但却不知道做点什么来进行练习。

说到看代码,我就想到了全球最大的同性交友网站GitHub。

在GitHub上面找项目还不能漫无目的的去找啊,毕竟这是一个大宝库,里面的内容非常丰富;

不仅仅是有Python,还有JS,JAVA等很多很多的语言,如果一直盲目的看下去,会浪费大量的时间。

所以我就打算写一个小爬虫,来爬取一下GitHub上面我想要的小项目。

·首先既然是要练习python的项目,肯定语言是Python;

·其次,既然是小项目,那代码不会太长,我这里设置为150K-200K的文件大小,这样应该项目也会比较小;

·最后,我如果获取的是整个GitHub上面的这个大小的python项目,对我来说也是海量的,所以要限制数量,我这里限制为最近一个月发布的30个项目。

好了这就是我的需求了,一共三点,同样我们要去考虑一下,这三点的内容应该如何应对。

首先第一个就是怎么去找到所有的python项目呢?在这里我们使用了GitHub的API来获取项目,那首先来看一下API的形式。

https://api.github.com/search/code?q=language:想找的语言

这个输入了之后,就可以找到想找的语言的所有项目了。

但找到了并没有结束,还需要给爬下来,那这里面选择的是requests库,通过requests对网页进行访问,获取数据:

importrequests

GetCodeApi ="https://api.github.com/search/code?q="

GetRepoApi ="https://api.github.com/search/repositories?q=language:python"

在整个API中,设置的条件还有三个还要提供文件大小以及目录:

https://api.github.com/search/code?q=language:语言+size:大小+repo:目录

这里大家可能比较好奇为什么我可以构建出来这样的一个API,实际上是通过GitHub的API接口网站来找的,这里有一个例子:

我们可以看到里面有很多的字段,比如说我选中的这个字段,实际上就代表了这个文件的大小,那也是符合我们需要的字段,那就需要在这个API中体现出来。

repo这个参数在哪里呢?实际上这个参数在html_url中:

当然啦,你要是认为哪个repo是和full_name一样的话,也是可以的,其实我最开始也是这么认为的。

不过后来我看到了下面这个东西,就认为上面的那个html_url这个更为靠谱些,就选择它了。

后面全部都是这个东西,那就是我们所需要的了。

下面我们就要建立一个函数,三个参数是需要我们自己输入的。

defget_code(language, size, repo):

这三个参数都是为了组成URL的,那这里面我们也要写上URL的内容:

url= GetCodeApi +"language:"+ language +"+size:"+ size +"+repo:"+ repo

这样就可以访问GitHub的接口了,但是我们要用它,读取这个JSON内容:

info=requests.get(url).json()

外加一个循环来进行重复性的操作:

if'items'ininfo:

fori ininfo['items']:

print(i['html_url'])

构建完了整个的函数。下面放上完整版:

defget_code(language, size, repo):

url = GetCodeApi +"language:"+ language +"+size:"+ size +"+repo:"+ repo

# 访问GitHub接口

info =requests.get(url).json()

if'items'ininfo:

fori ininfo['items']:

print(i['html_url'])

好,构建完了这个之后,我们就要进行下一步了,在上一步中我们实际上解决了两个问题;

一个是如何查找所有的python语言的项目,第二个是怎么限制文件的大小。

接下来需要解决的就是判断时间的问题,我们需要找到JSON里面写的这个:

方框中这两个值比较重要,第一个带黄底的是建立时间,第二个是更新时间。

框选两个是方便我们进行筛选,如果想找建立时间的,就用created_at进行判断,如果想找更新时间的就用updated_at来判断。

defget_project(FindTime):

info = requests.get(GetRepoApi).json()

forIininfo[‘items’]:

created_time = i[‘created_at’]

当然了,这里面我们找的是建立时间的,也可以找更新时间的(更新时间的感觉项目会更多一些),

如果要是更新时间的就将created_at改为updated_at就可以了。

ifcreated_time > FindTime

如果建立时间大于查找时间的时候,就执行下面的内容(这里给内容直接写死了,大家可以开动一下脑筋改一下~改为自己输入哦~):

language="python"

size ="

现在看到其实语言和size写死了,但是这个repo真的不能写死啊,这时候上面的截图里面有些html_url的后面箭头指的是repo的,那我们需要提取出来:

repo=i['html_url'].replace("https://github.com/","")

这次就要激活一下上面写的查找函数了:

get_code(language,size, repo)

执行这个函数就OK了,但是这里面有个问题,就是这个时间的问题。

时间推荐直接手动修改字符串,例如get_project(‘2019-02-12T00:00:00Z’)

好,那就给这部分的代码完整版放出来咯

defget_project(FindTime):

info = requests.get(GetRepoAPI).json()

foriininfo['items']:

created_time =i['created_at']

ifcreated_time >last_week:

language ="python"

size ="

repo =i['html_url'].replace("https://github.com/","")

get_code(language,size, repo)

这样我们就有取之不尽,用之不竭的小项目可以模仿,可以学习咯~

输出的结果是这样的:

最后,我将继续扮演一个小白,努力创造一个努力学习的小白形象,技术代码两开花,弘扬中华文化,希望大家多多支持啊~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191029A0HQ3O00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券