【问题标题】:Python request.get error on Wikipedia image URL维基百科图像 URL 上的 Python request.get 错误
【发布时间】:2022-10-01 03:01:54
【问题描述】:

Requests.get() 似乎没有返回维基百科图像 URL 的预期字节,例如https://upload.wikimedia.org/wikipedia/commons/0/05/20100726_Kalamitsi_Beach_Ionian_Sea_Lefkada_island_Greece.jpg

import wikipedia
import requests

page = wikipedia.page(\"beach\")
first_image_link = page.images[0]
req = requests.get(first_image_link)
req.content

b\'<!DOCTYPE html>\\n<html lang=\"en\">\\n<meta charset=\"utf-8\">\\n<title>Wikimedia Error</title>\\n<style>\\n*...
  • 那是因为该链接上不存在图像File not found: /v1/AUTH_mw/wikipedia-commons-local-public.05/0/05/20100726_Kalamitsi_Beach_Ionian_Sea_Lefkada_island_Greece.jpg%27
  • @Himanshuman 帖子中的链接有一个字符串引用,已修复。对这个问题有什么想法吗?

标签: python python-requests wikipedia


【解决方案1】:

大多数网站都会阻止没有有效浏览器作为用户代理的请求。维基媒体就是这样一种。

import requests
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'}
res = requests.get('https://upload.wikimedia.org/wikipedia/commons/0/05/20100726_Kalamitsi_Beach_Ionian_Sea_Lefkada_island_Greece.jpg', headers=headers)
res.content

这会给你预期的输出

【讨论】:

    【解决方案2】:

    我输入了你的代码,它似乎是一个“错误:403,禁止。”. Wikipedia 在请求中需要 user agent 标头。

    import wikipedia
    import requests
    
    headers = {
        'User-Agent': 'My User Agent 1.0'
    }
    
    page = wikipedia.page("beach")
    first_image_link = page.images[0]
    req = requests.get(first_image_link, headers=headers, stream=True)
    req.content
    

    对于用户代理,您可能应该提供比我在示例中使用的占位符更具描述性的内容。也许是你的脚本的名称,或者只是“脚本”这个词或类似的东西。 我测试了它,它工作正常。您将按预期取回图像。

    【讨论】:

      猜你喜欢
      • 2017-07-06
      • 2018-05-27
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      相关资源
      最近更新 更多