0.项目背景
导师的一篇论文需要用到包含某一个关键字Github上的代码片段,所以我写了一个爬虫项目将github上面包含某一关键字的代码链接全部爬取出来,并存入csv文件中。
1.开发环境和工具模块
python版本:python 3.6
开发用的IDE:pycharm
所用的第三方库: 爬虫:requests + BeautifulSoup
github官方API: https://developer.github.com/v3/search/#search-code //这是官方的API用来搜索,得到的是一个Json文件//
2.开发思路
本来的想法是直接用github官方的API直接得到一个JSON文件然后再去解析,但是13年以后,search-code的这个API就不能在全部的公共库中去搜索,搜索时,必须要指定特定的用户或者机构或者是项目库。这个是它的官方说明: https://developer.github.com/changes/2013-10-18-new-code-search-requirements/
所以要换一个思路,我的想法是先用爬虫爬取所有包含某写关键字代码的库名和作者名,然后用这些库名和某一关键字作为参数去调用github的官方API,通过解析返回的JSON文档,得到相关代码的链接和一些其他的信息。
3.项目分析
3.1 获取包含某关键字代码的库名
def parse_keyword(self, keyword):
# 解析登陆以后的页面,筛选出包含这个关键字的python代码
user_repositorys = set() # 集合用来存放作者名和库名
for i in range(101): #github上只显示前一百页的信息
url = "https://github.com/search?l=Python&p={id}&q={keyword}&type=Code".format(id=i+1, keyword=keyword) # 循环的爬取页面信息
#需要登录验证
resp = self.session.get(url=url, headers=self.login_headers, verify=False)
soup = BeautifulSoup(resp.text, "lxml")#解析信息
#通过标签可以筛序信息
pattern = soup.find_all('a', class_='text-bold')
for item in pattern: #将库名和作者名存入集合之中
print(item.string)
user_repositorys.add(item.string)
上面代码主要是有两个问题要解决,第一个是github上爬取公共库需要登录验证,我参考的是这位作者的方法:https://blog.csdn.net/killeri/article/details/86093665</