4 回答
不幸的是,Tumblr API 似乎有一些限制(缺少关于 Reblogs 的元信息,注释限制为 50),所以你无法获取所有注释。
根据服务条款也禁止进行页面抓取。
“在访问或使用服务时,您不得进行以下任何操作:(...) 未经 Tumblr 事先明确书面同意,从服务中抓取服务,尤其是从服务中抓取内容(定义如下);”
资源:
https://groups.google.com/forum/?fromgroups=#!topic/tumblr-api/ktfMIdJCOmc
如果没有 JS,您将获得仅包含注释的单独页面。对于提到的博客文章,第一页将是:
以下页面链接在底部,例如:
- http://ronbarak.tumblr.com/notes/40692813320/4Y70Zzacy?from_c=1358403506
- http://ronbarak.tumblr.com/notes/40692813320/4Y70Zzacy?from_c=1358383221
- http://ronbarak.tumblr.com/notes/40692813320/4Y70Zzacy?from_c=1358377013
- …</li>
(请参阅我关于如何在a
'sonclick
属性中找到下一个 URL 的答案。)
现在您可以使用各种工具来下载/解析数据。
以下 wget 命令应下载该帖子的所有注释页面:
wget --recursive --domains=ronbarak.tumblr.com --include-directories=notes http://ronbarak.tumblr.com/notes/40692813320/4Y70Zzacy
就像 Fabio 暗示的那样,最好使用 API。
如果由于任何原因您不能,那么您将使用的工具将取决于您想对帖子中的数据做什么。
- 对于数据转储: urllib 将返回您想要的页面的字符串
- 在 html 中寻找特定部分:lxml 相当不错
- 在不守规矩的 html 中寻找东西:绝对是 beautifulsoup
- 在一个部分中寻找一个特定的项目:beautifulsoup、lxml、文本解析是你所需要的。
- 需要将数据放在数据库/文件中:使用scrapy
Tumblr url 方案很简单:url/scheme/1、url/scheme/2、url/scheme/3 等等……直到你到达帖子的结尾,服务器不再返回任何数据。
因此,如果您打算以暴力方式进行抓取,您可以轻松地告诉脚本转储硬盘驱动器上的所有数据,直到内容标签为空为止。
最后一句忠告,请记住在你的脚本中放一个小的 sleep(1000),因为你可能会给 Tumblr 服务器带来一些压力。
如何在 tumblr 上加载所有笔记?也涵盖了这个话题,但 unor 的回应(上图)做得很好。