美文网首页Python小哥哥python爬虫
听说你没有python项目可做,我教你个方法

听说你没有python项目可做,我教你个方法

作者: 我爱学python | 来源:发表于2019-03-14 14:33 被阅读2次

    学习了一段时间的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对网页进行访问,获取数据:

    import requests
    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接口网站来找的,这里有一个例子:

    img

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

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

    img

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

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

    img

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

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

    def get_code(language, size, repo):
    

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

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

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

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

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

    if 'items' in info:
           for i ininfo['items']:
              print(i['html_url'])
    

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

    def get_code(language, size, repo):
       url = GetCodeApi +"language:" + language + "+size:" + size +"+repo:" + repo
       # 访问GitHub接口
       info =requests.get(url).json()
       if 'items' in info:
           for i ininfo['items']:
              print(i['html_url'])
    

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

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

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

    img

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

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

    def get_project(FindTime):
    info = requests.get(GetRepoApi).json()
    for I in info[‘items’]:
       created_time = i[‘created_at’]
    

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

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

    if created_time > FindTime
    

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

    language ="python"
       size = "<200"
    

    现在看到其实语言和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’)

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

    def get_project(FindTime):
       info = requests.get(GetRepoAPI).json()
       for i in info['items']:
           created_time =i['created_at']
           if created_time >last_week:
               language ="python"
               size ="<200"
               repo =i['html_url'].replace("https://github.com/", "")
               get_code(language,size, repo)
    

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

    输出的结果是这样的:

    img

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

    相关文章

      网友评论

        本文标题:听说你没有python项目可做,我教你个方法

        本文链接:https://www.haomeiwen.com/subject/cowqmqtx.html