【问题标题】:How to programmatically retrieve editing history pages from MusicBrainz using python?如何使用 python 以编程方式从 MusicBrainz 检索编辑历史页面?
【发布时间】:2012-03-10 09:40:43
【问题描述】:

我正在尝试以编程方式从 MusicBrainz 网站检索编辑历史记录页面。 (musicbrainzngs 是 MB Web 服务的库,无法从 Web 服务访问编辑历史记录)。为此,我需要使用我的用户名和密码登录 MB 网站。

我尝试使用mechanize 模块,并使用登录页面第二个表单(第一个是搜索表单),我提交了我的用户名和密码;从响应来看,我似乎成功登录了该站点;但是,对编辑历史页面的进一步请求会引发异常:

mechanize._response.httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt

我了解异常情况及其原因。我对不滥用网站负全部责任(毕竟,任何使用都会用我的用户名标记),我只是想避免手动打开页面、保存 HTML 并在保存的 HTML 上运行脚本。我可以克服 403 错误吗?

【问题讨论】:

    标签: python web musicbrainz


    【解决方案1】:

    更好的解决方案是尊重 robots.txt 文件并简单地下载编辑数据本身而不是屏幕抓取 MusicBrainz。您可以在此处下载完整的编辑历史记录:

    ftp://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport

    查找文件 mbdump-edit.tar.bz2。

    并且,作为 MusicBrainz 团队的负责人,我想请您尊重 robots.txt 并下载编辑数据。这就是我们使编辑数据可下载的原因之一。

    谢谢!

    【讨论】:

    • 负载将是 90 个请求(仅某些录制编辑的第一页)在 个月 中,检查某些 PUID 关联的指针或分离可能是错误的;最近足够的数据几乎是我的目的的要求。我只想自动化我在任何情况下都会手动执行的操作。但是,如果您愿意,每次有更多最新数据可用时,我都会下载 1.5 GiB 的数据,我会按照您的建议进行操作。谢谢指点。
    【解决方案2】:

    如果您想绕过网站的robots.txt,可以通过告诉您的mechanize.Browser 忽略robots.txt 文件来实现此目的。

    br = mechanize.Browser()
    br.set_handle_robots(False)
    

    此外,您可能希望更改浏览器的用户代理,使您看起来不像机器人:

    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
    

    请注意,这样做时,您实际上是在诱使网站认为您是有效客户。

    【讨论】:

    • 非常感谢您的回答和警告。这样就可以了。
    猜你喜欢
    • 1970-01-01
    • 2012-04-05
    • 2013-06-26
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多