Python 网站抓取-从网站获取密钥

Python 网站抓取-从网站获取密钥,python,json,web-scraping,Python,Json,Web Scraping,我已从以下网站(代表圣保罗-巴西的公交线路)下载了所有文件: 我想知道是否有一种更优雅的方式 基本上,我所做的是对00000到99999之间的所有值进行循环,用#####替换这个数字 检查网站是否存在,如果存在,请下载 为了使这项工作更有效率,有没有办法在掌握所有钥匙之前就知道 我有所有的文件,但这是一个非常常见的问题,我想知道是否有捷径可以解决它。我是网站的创建者,并提前为没有(尚未)将网站从葡萄牙语翻译成英语表示歉意,否则会使这些问题更清楚(这个答案更短) 正如您可能已经注意到的,数据显示了

我已从以下网站(代表圣保罗-巴西的公交线路)下载了所有文件: 我想知道是否有一种更优雅的方式

基本上,我所做的是对00000到99999之间的所有值进行循环,用#####替换这个数字 检查网站是否存在,如果存在,请下载

为了使这项工作更有效率,有没有办法在掌握所有钥匙之前就知道

我有所有的文件,但这是一个非常常见的问题,我想知道是否有捷径可以解决它。

我是网站的创建者,并提前为没有(尚未)将网站从葡萄牙语翻译成英语表示歉意,否则会使这些问题更清楚(这个答案更短)

正如您可能已经注意到的,数据显示了圣保罗的公共汽车、地铁和火车的交通路线,这样可以更容易地找到它们的连接,并通过连接计划路线(谷歌地图和其他工具可以自动进行,有时通过更互动的搜索可以找到丢失的路线)

它使用“便宜的”路线间近距离搜索(SPTrans),并从圣保罗运输公司(SPTrans)获取数据

回答您的第一个问题:这些ID是来自原始站点的ID。然而,它们并不是很稳定(我见过它们删除旧ID并替换新ID只是因为线路改变了路线),所以Cruzalinhas不时地进行完全爬网并更新整个数据库(我会完全替换它,但Google App Engine让它比平常更难)

好消息是:该网站是麻省理工学院许可证下的开源网站。文档也仍然是葡萄牙语的,但您最感兴趣的是命令行爬虫

获取数据的最有效方法是进行
sptscraper.py下载
,然后
sptscraper.py解析
,然后
sptscraper.py转储
并从那里导入。还有更多选项,下面是其帮助屏幕的快速翻译:

请记住,这些数据不是在SPTrans同意的情况下获取的,即使这是公开信息,他们也会这样做。在《数字信息自由法》(specific freedom of digital information law)通过之前,该网站和scraper的创建是为了抗议这一行为(尽管此前已有监管公共服务信息可用性的立法,因此在此方面没有违法行为,如果您负责任地使用它,也不会有违法行为)

出于这个原因(并且由于后端有点…“挑战”),scaraper在限制请求时非常小心,以避免服务器过载。它会使爬行时间延长几个小时,但你不想让服务过载(这可能会迫使他们阻止你,甚至改变网站以使爬行更加困难)

我最终将对该代码进行全面重写(可能是我几年前编写的第一个Python/App Engine代码,也是一次快速黑客攻击,重点是暴露这些公共数据在SPTrans网站范围之外的用处)。它将有一个更健全的爬行过程,应该使最新的数据可以在一次点击下载,并可能使一个完整的行列表在API上可用


现在,如果您只想查看上一次爬网(我在一两个月前做过),请与我联系,我很乐意向您发送sqlite/JSON文件。

这些文件是否列在其他地方?例如,这可能是公共汽车号码吗?在这种情况下,您可以构建一个所有现有公交车号码的列表,并查询它们的路线。或者你要求网站所有者实现一个查询,列出所有的键:)这些号码可能与巴士号码有关,尽管我不知道怎么做。网站所有者可能会传递整个密钥列表(他在一段时间前提供了整个数据库,但链接已断开)。我只是想知道是否有办法直接通过网站获得完整的名单。很多时候,我发现自己从网站上下载文件,这些文件使数据可用于抓取,但这种障碍使该过程效率低得多(也不那么优雅)。您可以自己制作有效密钥列表。第一次查询所有键并记住正在工作的键。下次你只需要查询那些实际存在的。但这只有在密钥没有改变的情况下才有效。(当然,如果你想要一个问题的通用答案,我会说,假设站点不改变信息并且总是添加新的ID,我能想象的最好方法是存储上一个爬网的ID并监视下一个ID,看看是否出现新的ID)
Downloads and parses data from public transportation routes from the SPTrans
website.

It parses HTML files and stores the result in the linhas.sqlite file, which
can be used in other applications, converted to JSON or used to update
cruzalinhas itself.

Commands:
info          Shows the number of pending updates
download [id] Downloads HTML files from SPTrans (all or starting with id)
resume        Continues the download from the last line saved.
parse         Reads downloaded HTMLs and (soft) inserts/updates/deletes in
              the database.
list          Outputs a JSON with the route IDs from the database.
dump [id]     Outputs a JSON with all routes in the database (or just one)
hashes        Prints a JSON with the geohashes for each line (mapping to
              the routes that cross the hash)
upload        Uploads the pending changes in the database to cruzalinhas.