【问题标题】:Python crawler does not work properlyPython 爬虫无法正常工作
【发布时间】:2017-11-07 15:10:23
【问题描述】:

我刚刚编写了一个 Python 爬虫来从 freemidi.org 下载 MIDI 文件。查看Chrome中的请求头,发现如果下载页面是https://freemidi.org/getter-20225(简称“getter-20225”),“Referer”属性必须是https://freemidi.org/download-20225(后面简称为“download-20225”)稍后)为了正确下载midi文件。我在 Python 中这样做了,像这样设置标题:

headers = {
    'Referer': 'https://freemidi.org/download-20225',
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}

这和我在Chrome中查看的请求头完全一样,我尝试使用这行代码下载文件。

midi = requests.get(url, headers=headers).content

但是,它不能正常工作。它没有下载 midi 文件,而是下载了站点“download-20225”的 html 文件。后来我发现如果我尝试直接访问站点“getter-20225”,它也会带我到“download-20225”。我认为这可能表明标题错误,所以它把我带到另一个网站而不是开始下载。

我对编写 Python 爬虫还是很陌生,所以有人可以帮我找出程序出了什么问题吗?

【问题讨论】:

    标签: python http-headers web-crawler python-requests


    【解决方案1】:

    这里的问题似乎是带有 midi 文件的页面(例如“getter-20225”)希望在下载歌曲后将您重定向回歌曲页面(例如“download-20225”)。但是,requests 只返回重定向中最后一页的内容。

    您可以将 allow_redirects 参数设置为 False 以让请求从“getter”页面(即 midi 文件)返回内容:

    midi = requests.get(url, headers=headers, allow_redirects=False)
    

    请注意,如果您想将 midi 文件写入磁盘,则需要以二进制模式打开目标文件(因为 midi 文件是以字节为单位写入的)。

    with open('example.mid', 'wb') as ex:
        ex.write(midi.content)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-04
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2013-05-10
      • 2015-05-06
      相关资源
      最近更新 更多