有JSON API for PyPI允许获取包的数据:
http://pypi.python.org/pypi/<package_name>/json
http://pypi.python.org/pypi/<package_name>/<version>/json
但是,是否可以通过GET调用获取所有PyPI包的列表(或者,例如,最近的包)?
答案 0 :(得分:12)
最简单的方法是使用simple index at PyPI列出所有包而不会产生任何开销。然后,您可以通过对问题中提到的URL执行GET请求来单独请求每个包的JSON。
答案 1 :(得分:11)
我知道您要求通过JSON API执行此操作,但您可以使用XML-RPC api轻松获取此信息,而无需解析HTML。
try:
import xmlrpclib
except ImportError:
import xmlrpc.client as xmlrpclib
client = xmlrpclib.ServerProxy('https://pypi.python.org/pypi')
# get a list of package names
packages = client.list_packages()
答案 2 :(得分:2)
注意:为了使这样的任务变得简单,我实现了一个自己的 Python 模块。可以使用 pip
:
pip install jk_pypiorgapi
该模块使用起来非常简单。在实例化代表 API 接口的对象后,您可以使用它:
import jk_pypiorgapi
api = jk_pypiorgapi.PyPiOrgAPI()
n = len(api.listAllPackages())
print("Number of packages on pypi.org:", n)
此模块还提供下载有关特定软件包信息的功能,如 pypi.org
所提供的:
import jk_pypiorgapi
import jk_json
api = jk_pypiorgapi.PyPiOrgAPI()
jData = api.getPackageInfoJSON("jk_pypiorgapi")
jk_json.prettyPrint(jData)
此功能也可能有用。
答案 3 :(得分:1)
我尝试了this answer,但无法在Python 3.6
上运行
我找到了一种使用lxml包进行HTML解析的解决方案,但是您必须通过pip命令将其安装为
pip install lxml
然后,尝试以下代码段
from lxml import html
import requests
response = requests.get("https://pypi.org/simple/")
tree = html.fromstring(response.content)
package_list = [package for package in tree.xpath('//a/text()')]
答案 4 :(得分:0)
这是Bash的一线:
curl -sG -H 'Host: pypi.org' -H 'Accept: application/json' https://pypi.org/pypi/numpy/json | awk -F "description\":\"" '{ print $2 }' |cut -d ',' -f 1
# NumPy is a general-purpose array-processing package designed to...