我正在嘗試執行 NLP 任務。為此,我需要大量來自 GitHub 的 Readme.md 檔案。這就是我想要做的:
- 對于給定的 number
n,我想n根據它們的星數列出第一個 GitHub 存盤庫(及其 URL)。 - 我想從這些 URL 下載 Readme.md 檔案。
- 我想將 Readme.md 檔案保存在我的硬碟上,每個檔案都在一個單獨的檔案夾中。檔案夾名稱應該是存盤庫的名稱。
我不熟悉爬蟲和網頁抓取,但我對 python 比較熟悉。如果您能給我一些關于如何完成這些步驟的幫助,我將不勝感激。任何幫助,將不勝感激。
我的努力:我搜索了一下,發現了一個網站 (gitstar-ranking.com),它根據 GitHub 存盤庫的星級對其進行排名。但這并不能解決我的問題,因為從該網站獲取這些 repos 的名稱或 URL 又是一項抓取任務。
uj5u.com熱心網友回復:
這是我使用@Luke 的建議的嘗試。我將最小星數更改為 500,因為我們不需要 500 萬個結果(>500 仍會產生 66513 個結果)。
您可能不需要第 29-30 行的 ssl 解決方法,但由于我在代理后面,因此正確執行此操作很痛苦。
該腳本查找readme.md以小寫和大寫的任意組合呼叫的檔案,但僅此而已。它將檔案保存為README.md(大寫),但這可以通過使用實際檔案名進行調整。
import urllib.request
import json
import ssl
import os
import time
n = 5 # number of fetched READMEs
url = 'https://api.github.com/search/repositories?q=stars:>500&sort=stars'
request = urllib.request.urlopen(url)
page = request.read().decode()
api_json = json.loads(page)
repos = api_json['items'][:n]
for repo in repos:
full_name = repo['full_name']
print('fetching readme from', full_name)
# find readme url (case senitive)
contents_url = repo['url'] '/contents'
request = urllib.request.urlopen(contents_url)
page = request.read().decode()
contents_json = contents_json = json.loads(page)
readme_url = [file['download_url'] for file in contents_json if file['name'].lower() == 'readme.md'][0]
# download readme contents
try:
context = ssl._create_unverified_context() # prevent ssl problems
request = urllib.request.urlopen(readme_url, context=context)
except urllib.error.HTTPError as error:
print(error)
continue # if the url can't be opened, there's no use to try to download anything
readme = request.read().decode()
# create folder named after repo's name and save readme.md there
try:
os.mkdir(repo['name'])
except OSError as error:
print(error)
f = open(repo['name'] '/README.md', 'w', encoding="utf-8")
f.write(readme)
print('ok')
# only 10 requests per min for unauthenticated requests
if n >= 9: # n 1 initial request
time.sleep(6)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/486884.html
